sched_yield减缓其他线程

时间:2011-07-24 16:03:11

标签: linux linux-kernel

我们有在循环中使用sched_yield的代码。当我们这样做时,我们似乎得到了其他线程的较慢性能,特别是那些涉及内核调用(如IO和互斥/事件处理)的线程。我正试图确定这种行为的确切原因。

sched_yield的过度调用会导致内核出现瓶颈吗?

我的怀疑是,如果我们不断要求内核检查其进程列表,那么其他线程将受到影响,因为关键数据结构可能会被连续锁定 - 而如果我们没有调用sched_yield那些内核锁将倾向于无可争议。这是否有意义,或者反复拨打sched_yield是否完全可以。

1 个答案:

答案 0 :(得分:6)

查看Linux的sched_yield手册页:

  

避免调用sched_yield()          不必要或不恰当地(例如,当其他人需要资源时)          可调度线程仍然由调用者保持),因为这样做会导致          在不必要的上下文切换中,这将降低系统性能

在紧密循环中调用它会导致问题。降低你打电话的速度。

(并检查您是否需要首先调用它。调度程序通常会自行完成正确的事情。)

如果你有一个低优先级的线程,你会发现有趣的其他选项:

当然是好的nice命令。