Go程序中的OS线程
我正在使用go 1.3.3。 我试图理解Go何时会产生新线程。我有以下两个围棋项目: 方案1:Go程序中的OS线程,go,goroutine,Go,Goroutine,我正在使用go 1.3.3。 我试图理解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
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个线程。我有很多问题:
感谢您的帮助。规则是go将为用户级代码生成准确的
GOMAXPROCS
线程。从文件中:
GOMAXPROCS变量限制操作系统线程的数量
可以同时执行用户级Go代码
但请注意:
中可以阻止的线程数没有限制
代表Go代码的系统调用;这些都不算在预算之内
GOMAXPROCS限制
其余部分取决于运行时,并且是特定于实现(和版本)的。可能还有比你意识到的更多的goroutine在运行;请参见在程序1中,您看到的另一个线程很可能是并发垃圾收集器。