调度

优点 #

  • 内存占用
  • 创建和销毀
  • 切换

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运行。