sched_yield减慢其他线程

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

sched_yield过度调用是否sched_yield导致内核瓶颈?

我的怀疑是,如果我们一直要求内核检查它的进程列表,那么其他线程将会受到影响,因为关键数据结构可能会不断被locking – 而如果我们没有调用sched_yield那么这些内核locking往往是无争议的。 这是否有意义,或者应该重复调用sched_yield是完全可以的。

Solutions Collecting From Web of "sched_yield减慢其他线程"

查看Linux的sched_yield手册页:

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

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

(并且首先检查你是否需要调用它,调度器通常自行完成正确的事情。)

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

  • sched_setscheduler – 可能带有SCHED_IDLESCHED_BATCH (影响整个过程)
  • thread_setschedparam – 每个线程,但可能会限制您可以使用的策略(现在找不到它)。

或当然,好老的nice命令。