【发布时间】:2025-12-11 21:55:01
【问题描述】:
Go 运行时(调度程序、垃圾收集器等)可以使用多少个线程?例如,如果GOMAXPROCS 是10,那么运行时将使用多少个内核线程?
编辑:
我正在阅读 the rationale 在 Go 1.5 中将 GOMAXPROCS 更改为 runtime.NumCPU()。曾经有一句话声称“单goroutine程序的性能可以通过提高GOMAXPROCS来提高,因为运行时的并行性,尤其是垃圾收集器。”
我真正的问题是:如果我有一个在具有 CPU 配额的 Docker 容器中运行的单协程程序,我需要多少逻辑处理器才能获得最大性能?
【问题讨论】:
-
我认为答案是:没有。因为例如GC 不在线程上运行,而是在 goroutine 上运行。最多会有 10 个非阻塞线程,所有的 goroutine 都调度在这 10 个(非阻塞)线程上。您的用户代码 goroutine 以及例如由垃圾收集器创建的 goroutine。
标签: multithreading go docker concurrency goroutine