你的电脑能运行多少 go
Go 的并发性能很高,但具体能开启多少个 goroutines 主要取决于以下因素:
- 你的计算机硬件性能:CPU 核心数、内存大小等。
- goroutines 的工作负载:例如轻量级的 I/O 操作可以开启更多,但如果每个 goroutine 都在计算密集型任务中消耗大量 CPU,则会受到 CPU 核心的限制。
- Go 运行时的调度:Go 的调度器会动态分配 CPU 给 goroutines,但受
GOMAXPROCS的影响。
以下是一个简单的测试程序,用于检查能创建多少个 goroutines:
go
package main
import (
"fmt"
"runtime"
"sync"
)
func main() {
var wg sync.WaitGroup
counter := 0
for {
wg.Add(1)
go func() {
defer wg.Done()
// 模拟一个轻量操作
runtime.Gosched()
}()
counter++
// 打印每 1 万个 goroutine
if counter%10000 == 0 {
fmt.Printf("已创建 goroutines 数量: %d\n", counter)
}
// 检测内存是否超出限制
var m runtime.MemStats
runtime.ReadMemStats(&m)
if m.Alloc > 2<<30 { // 超过 2GB 内存使用
fmt.Println("内存达到上限,停止创建")
break
}
}
fmt.Printf("最终创建的 goroutines 数量: %d\n", counter)
wg.Wait()
}程序说明:
- 每个 goroutine 会简单地运行一个
runtime.Gosched(),表示放弃当前执行机会。 - 每 10,000 个 goroutine 打印一次数量。
- 内存使用超过 2GB 时停止。
运行后结果:
- 如果你的电脑性能较好,可能会开启几百万个 goroutines。
- 注意:即使能开很多 goroutines,但不建议实际业务中这样操作,合理设计并发模型更重要。