Skip to content

你的电脑能运行多少 go

Go 的并发性能很高,但具体能开启多少个 goroutines 主要取决于以下因素:

  1. 你的计算机硬件性能:CPU 核心数、内存大小等。
  2. goroutines 的工作负载:例如轻量级的 I/O 操作可以开启更多,但如果每个 goroutine 都在计算密集型任务中消耗大量 CPU,则会受到 CPU 核心的限制。
  3. 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()
}

程序说明:

  1. 每个 goroutine 会简单地运行一个 runtime.Gosched(),表示放弃当前执行机会。
  2. 每 10,000 个 goroutine 打印一次数量。
  3. 内存使用超过 2GB 时停止。

运行后结果:

  • 如果你的电脑性能较好,可能会开启几百万个 goroutines。
  • 注意:即使能开很多 goroutines,但不建议实际业务中这样操作,合理设计并发模型更重要。