GMP调度模型是Golang语言中用于实现并发的一种调度模型。GMP分别代表了Goroutine、M和P。

Goroutine是Golang中的并发执行单元,类似于线程,但其启动和销毁的成本更低。Goroutine可以在一个或多个线程上运行,通过调度器进行调度。

M代表了线程,也称为机器线程。M是Golang调度器的执行实体,负责将Goroutine映射到操作系统的线程上,并执行Goroutine的代码。

P代表了处理器,也称为上下文。P负责管理线程所需的资源,如堆栈、全局变量等。P还负责调度M和Goroutine。

GMP调度模型的工作流程如下:

  1. 当一个Goroutine被创建时,它会被分配给一个P。
  2. 当一个P的队列中没有待执行的Goroutine时,它会从全局队列中获取一个Goroutine。
  3. 如果全局队列也为空,P会尝试从其他P的本地队列中偷取一个Goroutine。
  4. P将选中的Goroutine绑定到一个M上,并将M放入运行队列中。
  5. 当M执行完毕或被阻塞时,它会将Goroutine从运行队列中移除,并将Goroutine重新放入P的队列中,等待下次调度。
  6. 如果一个Goroutine发生阻塞,M会释放绑定的Goroutine,并将自己放入空闲队列中,等待重新分配Goroutine。

通过GMP调度模型,Golang能够高效地管理并发执行的Goroutine,并利用多核处理器的能力,实现高性能的并发编程

简述golang的GMP调度模型

原文地址: https://www.cveoy.top/t/topic/iWkl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录