go语言学习笔记 — 进阶 — 并发编程:调整并发的运行性能(GOMAXPROCS)

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 进阶 — 并发编程:调整并发的运行性能(GOMAXPROCS)相关的知识,希望对你有一定的参考价值。

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。

以上是关于go语言学习笔记 — 进阶 — 并发编程:调整并发的运行性能(GOMAXPROCS)的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 进阶 — 并发编程:为函数创建goroutine

go语言学习笔记 — 进阶 — 并发编程:同步sync,竞态检测 —— 检测代码在并发环境下出现的问题

go语言学习笔记 — 进阶 — 并发编程:通道(channel) —— 在多个goroutine之间通信的管道

go语言学习笔记 — 进阶 — 并发编程(11):同步sync,等待组(sync.WaitGroup)—— 保证在并发环境中完成指定数量的任务

go语言学习笔记 — 进阶 — 并发编程:通道(channel)—— 使用channel收发数据

go语言学习笔记 — 进阶 — 并发编程:通道(channel) —— 各种各样的通道