当我运行多线程代码时,系统(linux)有时会将线程从一个处理器移动到另一个处理器。由于我拥有与处理器一样多的线程,因此它没有充分的理由使缓存无效,并且使我的跟踪活动混乱。
您知道如何将线程绑定到处理器,为什么系统会这样做?
使用sched_setaffinity(这是特定于Linux的)。
sched_setaffinity
为什么调度程序会在不同处理器之间切换线程?好吧,假设您的线程最后一次在处理器1上运行,并且当前正在等待再次安排执行时间。同时,处理器1当前正在运行其他线程,但是处理器2是空闲的。在这种情况下,调度程序将线程切换到处理器2是合理的。但是,复杂的调度程序将尽力避免不必要地在处理器之间“反弹”线程。