线程状态流转

在这里插入图片描述

Go 语言通过 GMP(Goroutine, M, P) 模型来进行调度,其中 Goroutine 是 Go 语言中的轻量级线程,M(Machine)是 Go 语言运行时的线程,P(Processor)是逻辑处理器,它用于管理 Goroutine 的运行和调度。 Goroutine 会被调度到 M 上执行,M 可以同时运行多个 Goroutine,每个 M 都有一个 P 和一个 G 的队列,P 用于管理和调度 Goroutine,G 队列存储等待运行的 Goroutine,队列中的 Goroutine 按照 FIFO(先进先出)的原则进行调度。 当一个 Goroutine 需要被执行时,P 会从 G 队列中取出一个 Goroutine,将其与一个 M 绑定,然后再将 M 放入运行队列中等待 CPU 执行。当一个 Goroutine 阻塞时,P 会将其从 M 上摘下,然后将其放入等待队列中等待下一次调度。 在 GMP 模型中,M 和 P 之有三种状态(Running、Idle、Blocked),M 和 G 之也有三种状态(Running、Runnable、Waiting): - M 的 Running 状态表示该 M 正在执行 Goroutine; - M 的 Idle 状态表示该 M 没有 Goroutine 可以执行; - M 的 Blocked 状态表示该 M 正在等待某些事件的发生,比如等待 Goroutine 阻塞或等待系统资源; - G 的 Running 状态表示该 Goroutine 正在被某一个 M 执行; - G 的 Runnable 状态表示该 Goroutine 准备好被执行,但是还没有被 M 取走; - G 的 Waiting 状态表示该 Goroutine 正在等待某些事件的发生,比如等待 I/O 完成或等待定时器超时。 总之,GMP 模型是 Go 语言调度的核心,它的状态流转是 Go 语言进行调度的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值