Mar*_*n B 17
使用sched_setaffinity(这是特定于Linux的).
为什么调度程序会在不同处理器之间切换线程?好吧,想象一下你的线程最后在处理器1上运行,并且正在等待再次安排执行.同时,当前在处理器1上运行不同的线程,但处理器2是空闲的.在这种情况下,调度程序将您的线程切换到处理器2是合理的.但是,复杂的调度程序将尽量避免在处理器之间"跳动"超过必要的线程.
你可以从bash做到这一点.taskset我在这个问题上熟悉了一个很好的命令(你也可以找到关于调度程序应该在那里运行的有价值的讨论).该命令接受进程的pid并将其绑定到特定的处理器.
taskset -c 0 -p PID
Run Code Online (Sandbox Code Playgroud)
使用PID将进程绑定到处理器(核心)编号0.
它与线程有什么关系?为每个线程分配一个与pid具有相同权限的标识符,也称为"tid".您可以使用gettid系统调用来获取它.或者你可以top通过按下来观察它(例如,在程序中H(某些进程将分成许多看似相同的条目,具有不同的pid--这些是线程).