Go语言调整并发的运行性能
2020-02-14 本文已影响0人
码二哥
参考:
http://c.biancheng.net/view/94.html
关键点
通过关键词汇
,实现快速
理解,记忆
的目的
:
其实,就一句话,Go语言可以
灵活
的调整
程序是单核
执行,还是多核
执行,多核
执行的话,可以设置CPU
的数量
1、Go的runtime里自带一个任务调度器2、任务
调度器
的目的
?可以高效地将
CPU
资源分配
给每一个任务
,也就是即使、高效的将
CPU
和任务
关联对应
起来3、如何
查询
当前服务器中,CPU核数
呢?runtime.NumCPU() 查询 CPU 数量
查询CPU核数
4、如何设置
Go程序运行时所需要
的CPU核数
?或者说,如何设置单核
执行,还是多核
执行呢?
runtime.GOMAXPROCS(逻辑CPU数量)5、
但是
,一般不
建议修改
这个值,让调度器
自己去处理
这些事情
在 Go语言程序运行时(runtime)实现了一个小型的任务调度器。这套调度器的工作原理类似于操作系统调度线程,Go 程序调度器可以高效地将 CPU 资源分配给每一个任务。传统逻辑中,开发者需要维护线程池中线程与 CPU 核心数量的对应关系。同样的,Go 地中也可以通过 runtime.GOMAXPROCS() 函数做到,格式为:
runtime.GOMAXPROCS(逻辑CPU数量)
这里的逻辑CPU数量可以有如下几种数值:
- <1:
不修
改任何数值。 - =1:
单核
心执行。 -
>1
:多核
并发执行。
一般情况下,可以使用 runtime.NumCPU()
查询 CPU 数量,并使用 runtime.GOMAXPROCS() 函数进行设置,例如:
runtime.GOMAXPROCS(runtime.NumCPU())
Go 1.5 版本之前,默认使用的是单核心执行。从 Go 1.5 版本开始,默认执行上面语句以便让代码并发执行,最大效率地利用 CPU。
GOMAXPROCS 同时也是一个环境变量,在应用程序启动前设置环境变量也可以起到相同的作用。