• 技术文章 >后端开发 >Golang

    Go中并发和并行的区别是什么

    青灯夜游青灯夜游2023-01-11 18:03:33原创47

    并发和并行的区别:1、并发是把任务在不同的时间点交给处理器进行处理,而并行是把每一个任务分配给每一个处理器独立完成;2、并发中在同一时间点,任务并不会同时运行,而并行中,在同一时间点,任务一定是同时运行。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    了解并发概念时,总会涉及另外一个概念并行。下面让我们来了解并发和并行之间的区别。

    并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。

    并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。

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

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

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

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

    1.gif
    图:并发与并行的区别

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

    【相关推荐:Go视频教程编程教学

    以上就是Go中并发和并行的区别是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:go语言 Golang
    上一篇:Go语言怎么导入包 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • go语言中切片怎么加元素• go语言有构造函数吗• Go有几种数据类型• Go语言变量的生命周期是啥• go语言怎么替换字符串
    1/1

    PHP中文网