为了账号安全,请及时绑定邮箱和手机立即绑定

我的 Go 程序如何让所有 CPU 内核都忙碌?

我的 Go 程序如何让所有 CPU 内核都忙碌?

Go
翻过高山走不出你 2021-06-08 17:45:20
Goroutines 是轻量级进程,由 Go 运行时自动将时间切片到一个或多个操作系统线程上。(这是Go 的一个非常酷的功能!)假设我有一个像网络服务器这样的并发应用程序。在我的假设程序中同时发生了很多事情,没有太多的非并发(阿姆达尔定律)比率。似乎当前使用的操作系统线程的默认数量是 1。这是否意味着只有一个 CPU 内核被使用?如果我开始我的程序runtime.GOMAXPROCS(runtime.NumCPU())这会合理有效地使用我 PC 上的所有内核吗?使用更多操作系统线程是否有任何“并行松弛”好处,例如通过一些启发式runtime.GOMAXPROCS(runtime.NumCPU() * 2)?
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

runtime.GOMAXPROCS()设置您的程序可以同时使用的(虚拟)CPU 内核数。允许 Go 使用比实际使用更多的 CPU 内核无济于事,因为您的系统只有这么多 CPU 内核。

为了在多个线程中运行,您的程序必须有多个 goroutine,通常使用go someFunc(). 如果你的程序没有启动任何额外的 goroutines,无论你允许它使用多少 CPU/内核,它自然只会在一个线程中运行。

查看这个和以下关于如何创建 goroutines 的练习。


查看完整回答
反对 回复 2021-06-21
  • 3 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信