我想了解 golang 如何在不添加 goroutine 的情况下为程序使用超过 1 个 CPU 和多个线程?
默认情况下会使用 GOMAXPROCS 定义的所有内核吗?
time go run main.go
go run main.go 281.55s user 32.68s system 166% cpu 3:08.59 total
这是活动监视器显示的内容
Go 编译器和运行时对某些操作执行自动并行化,例如内存分配、垃圾收集和一些标准库函数(例如,
sort.Sort
、sync.WaitGroup
)。即使您没有显式创建 goroutine,这些操作也会自动跨多个线程和 CPU 并行化。
最有可能的是,可能有一个库函数或编译器任务在底层使用 go 例程。 Go 默认使用 goroutine 来完成许多任务。