MPG模式:
M(Machine):操作系统的主线程
P(Processor):协程执行需要的资源(上下文context),可以看作一个局部的调度器,使go代码在一个线程上跑,他是实现从N:1到N:M映射的关键
G(Goroutine):协程,有自己的栈。包含指令指针(instruction pointer)和其它信息(正在等待的channel等等),用于调度。一个P下面可以有多个G
![]()
1、当前程序有三个M,如果三个M都在一个cpu运行,就是并发,如果在不同的cpu运行就是并行2、M1,M2,M3正在执行一个G,M1的协程队列有三个,M2的协程队列有3个,M3协程队列有2个
3、从上图可以看到: Go的协程是轻量级的线程,是逻辑态的,Go可以容易的起上万个协程。
4、其它程序c/java的多线程,往往是内核态的,比较重量级,几千个线程可能耗光cpu
并发模型