并发和并行的区别

一、什么是并发?

并发:指的是任务数多于cpu核数,当一个任务真的执行的时候他是需要使用cpu内核的但是由于任务多于cpu内核数,多个任务就需要轮换的使用cpu内核,实际上总有一些任务使用不到cpu内核也就是不在执行,只是因为多个任务之间对cpu内核的使用轮换的速度相当快,看上去一起执行而已。
二、什么是并行?

并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的。由于cpu内核数多于任务,那么每个任务都可以有一个cpu内核使用,这个时候多个任务就真的是一起执行了。
三、并行和并发的区别

并行和并发的关键点区别就是在于,任务的数量是多于cpu的内核数还是少于cpu的内核数。如果从执行角度理解就是,并发是交替执行,并行是同时执行。

以上内容摘自:http://python.itheima.com/areanew/schoolzixun/python/20190806/162527.html

----------------------------分割线----------------

在讲解并发概念时,总会涉及另外一个概念并行。下面让我们来了解并发和并行之间的区别。
并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。
并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。

并发不是并行。并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发是指同时管理很多事情,这些事情可能只做了一半就被暂停去做别的事情了。

在很多情况下,并发的效果比并行好,因为操作系统和硬件的总资源一般很少,但能支持系统同时做很多事情。这种“使用较少的资源做更多的事情”的哲学,也是指导 Go语言设计的哲学。

如果希望让 goroutine 并行,必须使用多于一个逻辑处理器。当有多个逻辑处理器时,调度器会将 goroutine 平等分配到每个逻辑处理器上。这会让 goroutine 在不同的线程上运行。不过要想真的实现并行的效果,用户需要让自己的程序运行在有多个物理处理器的机器上。否则,哪怕 Go语言运行时使用多个线程,goroutine 依然会在同一个物理处理器上并发运行,达不到并行的效果。

下图展示了在一个逻辑处理器上并发运行 goroutine 和在两个逻辑处理器上并行运行两个并发的 goroutine 之间的区别。调度器包含一些聪明的算法,这些算法会随着 Go语言的发布被更新和改进,所以不推荐盲目修改语言运行时对逻辑处理器的默认设置。如果真的认为修改逻辑处理器的数量可以改进性能,也可以对语言运行时的参数进行细微调整。

 

 Go语言在 GOMAXPROCS 数量与任务数量相等时,可以做到并行执行,但一般情况下都是并发执行。

以上内容摘自:http://c.biancheng.net/view/95.html

posted @   温柔的风  阅读(353)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2017-06-12 Git (gnome-ssh-askpass:3871): Gtk-WARNING **: cannot open display:
点击右上角即可分享
微信分享提示