我正在用 Go(和 C)编程。场景是:C 中有每个线程的事件通道。有时我从 Go 中调用 cgo,将请求发布到当前线程的通道。完成事件在几微秒后从同一通道返回,我调用 cgo 来轮询它们。
当然,当提交请求的 goroutine 轮询完成时,它可以在另一个线程中,但我们现在先忽略这个问题。我的问题是:在纯 C 中,我们可以调用pthread_setaffinity_np将轮询线程固定到 CPU 内核以减少延迟(假设 #threads <= #cores)。在 Go 中,我们应该在有 goroutines 的情况下这样做吗?
runtime.LockOSThread()多个 goroutine 来获取足够的 OS 线程,并通过 cgo 调用将它们固定在不同的内核上?PS 我也对 Go 的调度程序(GMP 模型)有所了解。不过好像Ms并没有绑定CPU核,Ps和物理核没有关系。