作者:无棱9931 | 来源:互联网 | 2023-09-23 14:12
操作系统中的程序可以往下分解为进程、线程和协程。Go中,协程被称为goroutine,被runtime进行调度。
GMP调度中,G代表goroutine,M代表线程,P是Processor,它包含了运行goroutine的资源,只有当 M 关联一个 P 后才能执行 G 。
复用线程:
2个体现:1.work stealing,当本线程无可运行的G时,尝试从其它县城绑定的P偷取G,而不是销毁线程;2.hand off,当本线程因为G进行系统调用阻塞是,线程释放绑定的P,把P转移给其它空闲的线程执行;
利用并行:
GOMAXPROCS设置P的数量,当GOMAXPROCS大于1时,就最多有GOMAXPROCS个线程处于运行状态,这些线程可能分布在多个CPU核上同时运行,使得并发利用并行。
在Go中,线程是运行goroutine的实体,调度器的功能就是把可运行的goroutine分配到工作线程上。
Go语言高阶:调度器系列(1)起源