我正在使用1.3.3。 我试图理解Go何时产生新线程。我有以下两个Go程序:
计划1:
package main
func main() {
for ;; {
}
}
计划2:
package main
import (
"sync"
)
func justrun(wg *sync.WaitGroup) {
for ;; {
}
wg.Done()
}
func main() {
var wg sync.WaitGroup
go justrun(&wg)
wg.Wait()
}
在活动监视器中,我看到程序1有2个线程,而程序2有3个线程。我有几个问题:
感谢任何帮助。
答案 0 :(得分:1)
规则是go将为用户级代码准确生成GOMAXPROCS
个线程。来自runtime文档:
GOMAXPROCS变量限制操作系统线程的数量 可以同时执行用户级Go代码。
但请注意:
可以阻止的线程数没有限制 系统调用代表Go代码;那些不算数 GOMAXPROCS限制。
其余部分取决于运行时,并且是特定于实现(和版本)的。还有比你可能意识到的更多的goroutines运行;见What are the three background goroutines in a Go program?