sched_yield减缓其他线程

edA*_*a-y 1 linux linux-kernel

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

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

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

Mat*_*Mat 6

看一下sched_yieldLinux 的手册页:

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

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

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

如果您有一个低优先级线程,您可以找到其他有趣的调查选项:

或者nice当然是好老的命令.