ZBLOG

Golang 的 goroutine 是如何实现的?

Golang 的 goroutine 是通过 Go 运行时(Go runtime)实现的。具体来说,当一个 Go 程序启动时,会创建一个操作系统线程,并在其上运行一个称为 G0 的 goroutine。在程序执行期间,当我们使用 go 关键字启动新的 goroutine 时,Go 运行时会负责将该 goroutine 分配到可用的操作系统线程上执行。

在 Golang 中,每个操作系统线程都维护了一个 M (machine)结构体,该结构体是与操作系统线程一对一关联的。M 结构体中包含了调度器所需的状态信息和堆栈空间等信息。而每个正在运行的 goroutine 都有一个对应的 G (goroutine)结构体,它保存了 goroutine 执行时所需要的所有信息。

此外,在 Golang 中还有另外两个重要的组件:P (processor)和调度器(scheduler)。P 是逻辑处理器(logical processor),它与 M 一样也是由 Go 运行时管理的。当一个新的 goroutine 被创建时,调度器会将其分配给 P 上执行。当 P 上没有可用的工作(即没有可用的 goroutine)时,调度器会从全局队列中获取已准备好执行但尚未分配给 P 的 goroutine,并将其分配给某个 P 上去执行。

总之,在 Golang 中,goroutines 是由 Go 运行时管理并分配到逻辑处理器上执行的。通过这种方式,Golang 实现了高效的并发编程。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6451

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?