我已经完成了在linux上运行的多线程c ++应用程序
经过几个小时的运行后,没有一个线程运行,大约12秒钟。
我已经看到在线程被挂起之前未完成的未完成的select系统调用未完成,在恢复之后报告,操作完成需要11.x秒。 (超时只有900毫秒)
这清楚地表明这个过程长期处于饥饿状态。
进程中的所有线程都是使用linux的默认调度策略(SCHED_OTHER)和默认优先级创建的。
还有另外5个类似的应用程序在同一个盒子上运行,由于套接字上收到大量数据,这些应用程序也像这个应用程序一样受到严重的I / O限制。但大多数时候,这个应用程序正在计划延迟。使用相同的sched策略和优先级创建其他应用程序,即默认值。为什么只有这个过程几乎在所有时间都被阻止了?
可能是因为这个过程更加I / O密集,因为更繁忙可能会导致更高的数据速率?那么,在这里调整的linux动态优先级会推动这个过程吗?
答案 0 :(得分:1)
Linux中的优先级和进程调度仅与CPU时间有关。事实上,Process Scheduler只关心等待在CPU上运行的进程。等待I / O的进程/线程不由进程调度程序处理,而是由I / O调度程序处理。