写点什么

Go 并发之 CSP 并发模型、协程并发

用户头像
Regan Yue
关注
发布于: 1 小时前
Go并发之CSP并发模型、协程并发

Go 并发之 CSP 并发模型、协程并发

什么是 CSP 并发模型

CSP通信顺序进程交谈循序程序,又被译为交换消息的循序程序(communicating sequential processes),它是一种用来描述并发性系统之间进行交互的模型。


CSP 模型的最大优点是灵活。但是容易出现死锁的情况,且未给予直接的并行支持,并行需要建立在并发的基础之上。


在 CSP 模型里面,进程间需要经过一种被称为管道来进行通信。


什么是管道,两个并发任务不需要共享内存,而是通过建立一条点对点的管道,数据用完之后,管道立即撤销。有了管道,不需要事先锁,而是需要用数据时建立管道。不需要数据时就撤销管道了。


管道与共享内存之间有很大的区别,内存共享是通过内存来共享内存,而管道是通过通信来共享内存。所以管道通信比内存共享效率要高很多。

协程

coroutine 就是协程,也称为 go 程。通过管道能够实现百万级的并发。如果说线程是抢占式的,那么协程是协作式的。在协程里面,也是通过管道来调度的。解放线程对 CPU 和内存的开销,线程是先占用 CPU 和内存后才调度,而协程是通过通信发送信号来调度,协程全是通过管道,由于协程的消耗比线程小很多,所以能够实现百万并发。


在协程中,IO 操作时绝大部分时间与 CPU 无关,这是管道带来的优势,不需要长时间锁住内存,也不需要 CPU 来做调度。


8G 内存的电脑,用 JAVA,C 来做并发,差不多也就千级并发,而用 GO 语言,通过管道可以让并发能力得到很大提升。

发布于: 1 小时前阅读数: 7
用户头像

Regan Yue

关注

还未添加个人签名 2020.08.12 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
skr~
1 小时前
回复
没有更多了
Go并发之CSP并发模型、协程并发