优点 #
- 内存占用
- 创建和销毀
- 切换
GMP #
GMP含义
- GoRoutine Go协程,是参与调度与执行的最小单位
- Machine 系统级线程
- Processor 逻辑处理器 关联了的本地可运行G的队列(也称为LRQ),最多可存放256个G
线程与进程
- 线程 独立调度的基本单位
- 进程 资源拥有的基本单位
变量 #
- M0 启动程序后的编号为0的主线程
- G0 是每次启动一个M都会第一个创建的GoRoutine,G0仅用于负责调度的G
优势 #
work stealing #
工作窃取模型。当一个P(逻辑处理器)的任务队列为空时,它可以随机从其他非空P的任务队列偷取任务来执行。这可以最大限度地提高 CPU 的利用率。
handle off #
使能M暂时释放对P的控制,让其他等待中的M接管P,从而实现充分利用多核资源。比如一个阻塞的goroutine释放了CPU,M就可以handle off,让其他M的goroutine运行。