我无法在Linux上获取线程(/进程)优先级,调度策略选择,何时以及如何选择,以及确切的效果是什么。
是否有任何文件(如指南),最好是具体的例子和时间表,我可以咨询一下?
答案 0 :(得分:3)
我无法在Linux上获取线程(/进程)优先级,调度策略选择
优先顺序通过利用底层操作系统来实现。线程和流程优先级很难从文档的角度来概括它的具体细节,这可能是你没有在线找到指南的原因。
我的建议(坦率地说)不打扰线程优先级。我已经完成了大量的线程编程,除了默认的优先级之外,我从未发现需要做任何事情。关于线程优先级排序唯一有效的时间是所有线程都完全受CPU限制,并且您希望一个或另一个任务获得更多周期。
此外,我非常确定至少在Linux下,这不是关于抢占,而是关于运行频率的更多信息。许多线程实现使用优先级调度队列,因此较高频率的线程在那里获得逻辑优先级以避免使较低频率线程匮乏。这意味着任何IO或其他阻塞操作都将导致低优先级线程运行并获得其时间片。
此页面是问题的good example of the complexities。引用:
可以看出,线程优先级1-8的CPU占用率几乎相等,而优先级9和10的份额要大得多(尽管9和10之间基本没有区别)。测试的版本是Java 6 Update 10.为了它的价值,我在运行Vista的双核机器上重复了实验,结果图的形状是相同的。我对优先级9和10的特殊行为的最佳猜测是,前台窗口中的THREAD_PRIORITY_HIGHEST具有足够的优先级,可供调度程序启动某些其他特殊处理(例如,内部优先级为14及以上的线程已完全补充量程)在等待之后,较低优先级使它们减少1)。
如果您必须使用线程优先级,那么您可能需要编写一些测试程序来了解您的架构如何使用它们。