3.8 Go之并发和并行

3.8 Go之并发和并行

并发和并行

并发(concurrency)

并发是指:

把任务在不同时间点交给处理器进行处理。同一时间点,任务并不会同时运行。

核心概念:

同时管理很多事情

并行的关键:

事情可能只做了一半就被暂停去做别的事情了

并行(parallelism)

并行是指:

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

核心概念:

让不同的代码片段在不同的物理处理器上执行。

并行的关键:

同时做很多事情

Go语言设计的哲学

“使用较少的资源做更多的事情”

并发和并行图示

说明:

一个逻辑处理器并发运行goroutine和两个逻辑处理器并行运行两个并发的gouroutine区别

 

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

goroutine和coroutine的区别

goroutine

可能发生并行执行

通信方式:

通过通道的方式来通信--->channel

goroutine的运行机制

抢占式任务处理--->类似现有的多线程、多进程任务处理

特点:

程序对cpu的控制权由操作系统来管理。

优点:

操作系统如果发现一个应用程序长时间大量地占用CPU,那么用户有权终止这个任务。

coroutine

始终顺序执行

通信方式:

通过让出和恢复操作来通信--->本质是在操作一个资源的时候不占有它,而只是对资源上锁。使用yieldresume操作

coroutine的运行机制

协作式任务处理

特点:

程序在不需要使用cpu时会主动交出cpu使用权

缺点:

开发者无意间或者故意让应用程序长时间占用CPU计算机很容易失去响应或者死机。

 

posted @ 2022-03-21 09:22  俊king  阅读(80)  评论(0编辑  收藏  举报