Goroutines 与线程:阐明内核和用户态关系
在编程领域,了解 Goroutines、用户线程的概念,内核线程至关重要。为了阐明这些概念,让我们探讨以下问题:
“有效” Go”文档引入了goroutines,导致人们对操作系统线程的含义感到困惑。在本文中,操作系统线程指的是内核线程。
根据“go-scheduler”论文,处理器的数量(P)反映了操作系统可用的调度上下文。这些上下文与 CPU 内核相关联,以确保高效的资源利用。然而,系统中的其他程序仍然可以访问 CPU 时间,因为内核调度程序管理资源分配。
操作系统生成的内核线程数量根据需求而变化。 “ps -eL”命令可用于验证特定系统上运行的实际内核线程数。
进一步说明
Goroutines,或用户线程,是驻留在 Go 程序中的轻量级并发实体。它们通过称为“P”的机制映射到操作系统线程(内核线程),确保它们可以同时在多个处理器上运行。 “P”的数量通常设置为可用 CPU 的数量。
需要注意的是,可用 CPU 的数量并不限制可以并发执行的任务数量。并发性通常涉及大量等待输入/输出 (IO) 操作。即使是高度计算密集型的任务也会被内核调度程序中断,以允许其他进程运行。
以上是Goroutines 与线程:Go 的 Goroutines 如何映射到内核线程并影响 CPU 利用率?的详细内容。更多信息请关注PHP中文网其他相关文章!