栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以强制在特定CPU上运行go例程?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以强制在特定CPU上运行go例程?

在现代Go中,我不会为了提高效率而将goroutine锁定在线程上。Go 1.5
添加了goroutine调度亲和力,以最小化goroutine在OS线程之间切换的频率。而且,必须权衡CPU之间剩余迁移的任何成本和用户模式调度程序的好处,避免上下文切换到内核模式。最后,当转换成本是一个实际问题时,有时更好的重点是更改程序逻辑,因此它需要进行的转换更少,例如通过传达批量工作而不是单个工作项。

但是即使考虑了所有这些,有时您也只需要锁定一个goroutine,例如C API需要它时,我就假设是这种情况。


如果整个程序都运行

GOMAXPROCS=1
,则通过从schedutils包中调用taskset实用程序来设置CPU亲和力相对简单。

我本来以为您不走运,

GOMAXPROCS >1
因为那样的话,goroutines会在运行时在OS线程之间迁移。实际上,詹姆斯·亨斯特里奇(James
Henstridge)指出,您可以使用它
runtime.LockOSThread()
来防止goroutine迁移。我不知道一旦将goroutine锁定到它后,就不会有任何Go
stdlib函数来设置当前线程的CPU关联性。您可能可以使用cgo和call
pthread_setaffinity_np
,因为显然Go在cgo模式下使用pthreads。由于我们在谈论系统调用,因此详细信息将因操作系统而异。

(如果您的整个程序是纯Go语言(没有C链接),则可以通过模块

sched_setaffinity
用零
pid
参数进行调用
syscall
。但这很棘手。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448012.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号