go - 将 GoRoutine 绑定(bind)到 CPU 内核

标签 go

这个问题在这里已经有了答案:





is it possible to force a go routine to be run on a specific CPU?

(2 个回答)


2年前关闭。




我需要运行许多 go 例程并将它们绑定(bind)到单独的 CPU 内核以进行基准测试。

我已经尝试过 runtime.LockOSThread() 但这会显着降低性能。我不想将 go 例程锁定到特定线程,据我所知,LockOSThread 就是这样做的。

例如:如果我有 n 个 goroutine,其中 n>1,它们应该绑定(bind)到 n 个核心,其中 GOMAXPROCS >= n。也就是说,每个 goroutine 总是被安排在同一个核心上。

最佳答案

  • 使用重用端口监听器。
  • 使用 GOMAXPROCS=1 为每个 CPU 内核运行一个单独的服务器实例。
  • 使用任务集将每个服务器实例固定到单独的 CPU 核心。
  • 保证多队列网卡的中断均匀
    分布在 CPU 内核之间。有关详细信息,请参阅此文章。

  • 可以找到完整的详细信息here

    关于go - 将 GoRoutine 绑定(bind)到 CPU 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55824274/

    相关文章:

    go - 如何将 []*type 传递给函数?

    go - 在go中复制一个文件夹

    Go 的值方法接收者 vs 指针方法接收者

    xml - 逐行读取 XML 文件

    go - 在后台执行命令

    macos - Mac 上的 Go 安装程序行为 : PATH modification vs symlink

    go - 如何转储 HTTP GET 请求的响应并将其写入 http.ResponseWriter

    docker - 在 helm 安装之前将 go 二进制文件移动到 pod 中的惯用方法是什么?

    go - 是否有可能知道 Go 中函数的返回值类型?

    go - Gin-Gonic v1.4.0 : ctx. FullPath() 缺失