【GoLang 那点事】Goroutine 和 Channel 的的使用和一些坑以及案例分析
CSP并发模型的意思将程序的执行和通信划分开来(Process和Channel),Process代表了执行任务的一个单元,Channel用来在多个单元之间进行数据交互,共享;Process内部之间没有并发问题,所有由通信带来的并发问题都被压缩在Channel中,使得聚合在一起,得到了约束,同步,竞争聚焦在Channel上,Go就是基于这种并发模型的,Go在线程的基础上实现了这一套并发模型(MPG),线程之上虚拟出了协程的概念,一个协程代表一个Process,但在操作系统级别调度的基本单位依然是线程,只是Go自己实现了一个调度器,用来管理协程的调度,M(Machine)代表一个内核线程,P(Process)代表一个调度器,G(Goroutine)代表一个协程,其本质是内核线程和用户态线程成了多对多的关系