golang面试题分析03_GMP调度器

本文介绍Go语言中的GMP调度机制,包括G(goroutine)、M(线程)、P(Processor)的概念及其工作原理。阐述了复用线程与利用并行两大核心思想,并解释了如何通过GOMAXPROCS设置实现并发利用并行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GMP调度

操作系统中的程序可以往下分解为进程、线程和协程。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)起源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值