go语言的运行时(runtime)实现了一个小型任务调度器,它类似于操作系统的线程调度,可以高效地把CPU资源分配给每一个任务。通过runtime.GOMAXPROCS()函数,可以指定线程池中线程与CPU核心数量的对应关系,如下:
这里,当主机逻辑CPU数量<
1时,不修改任何值;主机逻辑CPU数量=1,单核心执行;主机逻辑CPU数量>
1,多核并发执行。
runtime.GOMAXPROCS(主机逻辑CPU数量)
查询主机逻辑CPU数量,并设置并发执行核数。
fmt.Println(runtime.NumCPU()) // 查询主机逻辑CPU数量
runtime.GOMAXPROCS(runtime.NumCPU()) // 设置并发执行核数,也可以在程序启动前,设置环境变量GOMAXPROCS
go1.5之前默认单核执行;从go1.5开始,系统默认执行上述语句,以便并发执行代码,最大效率利用CPU。