Go CSP并发模型

Python042

Go CSP并发模型,第1张

Go的CSP并发模型

Go实现了两种并发形式。第一种是大家普遍认知的:多线程共享内存。其实就是Java或者C++等语言中的多线程开发。另外一种是Go语言特有的,也是Go语言推荐的:CSP(communicating sequential processes)并发模型。

CSP 是 Communicating Sequential Process 的简称,中文可以叫做通信顺序进程,是一种并发编程模型,由 Tony Hoare 于 1977 年提出。简单来说,CSP 模型由并发执行的实体(线程或者进程)所组成,实体之间通过发送消息进行通信,这里发送消息时使用的就是通道,或者叫 channel。CSP 模型的关键是关注 channel,而不关注发送消息的实体。 Go 语言实现了 CSP 部分理论

“ 不要以共享内存的方式来通信,相反, 要通过通信来共享内存。”

Go的CSP并发模型,是通过 goroutine和channel 来实现的。

goroutine 是Go语言中并发的执行单位。其实就是协程。

channel是Go语言中各个并发结构体(goroutine)之前的通信机制。 通俗的讲,就是各个goroutine之间通信的”管道“,有点类似于Linux中的管道。

Channel

Goroutine

调度器 由三方面实体构成:

三者对应关系:

上图有2个 物理线程 M,每一个 M 都拥有一个上下文(P),每一个也都有一个正在运行的goroutine(G)。

P 的数量可由 runtime.GOMAXPROCS() 进行设置,它代表了真正的并发能力,即可有多少个 goroutine 同时运行。

调度器为什么要维护多个上下文P 呢? 因为当一个物理线程 M 被阻塞时,P 可以转而投奔另一个OS线程 M (即 P 带着 G 连茎拔起,去另一个 M 节点下运行)。这是 Golang调度器厉害的地方,也是高并发能力的保障。

刷个go是什么

开通芝麻go的作用就是在会员周期内,实际享受的优惠金额。芝麻go其实就是给我们先享受店家的优惠,享受的额度达到或者超过了会员费用,我们再支付会员费用,如果享受到的优惠达不到标,就不用支付费用。

2.我们打开支付宝点击“我的”按钮。

3.然后在界面点击打开芝麻信用。

4.然后可以看到下面的界面里面有一个轻会员,点击进入,后续可能都会显示的是芝麻go了。

5.进入到界面,就可以看到相关的一些商家的优惠券了,我们点击自己需要的进入。

6.就可以看到下面显示的有一个优惠券详情,我们打开可以看一下这个是不是我们需要的。

7.然后下面都会有这个优惠券使用的要求,达到了某个额度,就支付会员费用,没有达到,退回享受的优惠就可以了。

8.如果确认这个自己是有需要的,我们就点击下面的同意协议,然后后续到店就可以使用优惠了。