专栏名称: GoCN
最具规模和生命力的 Go 开发者社区
今天看啥  ›  专栏  ›  GoCN

Go中秘而不宣的数据结构 runq, 难怪运行时调度那么好

GoCN  · 公众号  ·  · 2024-10-22 13:41
    

文章预览

秘而不宣系列: Go中秘而不宣的数据结构 spmc, 10倍性能于 channel 首先,让我们先来回顾 Go 运行时的 GPM 模型。这方面的介绍网上的资料都非常非常多了,但是我们也不妨回顾一下: “ GPM 模型中的 G 代表 goroutine。每个 goroutine 只占用几 KB 的内存,可以轻松创建成千上万个。G 包含了 goroutine 的栈、指令指针和其他信息,如阻塞 channel 的等待队列等。 P 代表 processor,可以理解为一个抽象的 CPU 核心。P 的数量默认等于实际的 CPU 核心数,但可以通过环境变量进行调整。P 维护了一个本地的 goroutine 队列,还负责执行 goroutine 并管理与之关联的上下文信息。 M 代表 machine,是操作系统线程。一个 M 必须绑定一个 P 才能执行 goroutine。当一个 M 阻塞时,运行时会创建一个新的 M 或者复用一个空闲的 M 来保证 P 的数量总是等于 GOMAXPROCS 的值,从而充分利用 CPU 资源。 在这个 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览