Linux – 当优先级较高的任务繁忙时,不会调度优先级较低的线程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux – 当优先级较高的任务繁忙时,不会调度优先级较低的线程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1418字,纯文字阅读大概需要3分钟。
内容图文
![Linux – 当优先级较高的任务繁忙时,不会调度优先级较低的线程](/upload/InfoBanner/zyjiaocheng/964/4e1432b7b9354e8aa89635824a5834de.jpg)
环境 – 嵌入式设备与linux内核2.6.18
要求 – 3个线程(从一个进程创建,假设P1创建了T1,T2,T3)
T1是linux优先级99(最高),T2是linux优先级50(中间),T3是linux优先级2(最低).没有为任何线程显式设置好的值.
T1和T3都每秒增加一次变量. T1每5秒打印一次变量.这很顺利.
[有问题的地方]当T2进入无限循环“for(;;);”时,T1的计数正常增加,但T3的计数根本没有增加.
意味着T3从未有时间在CPU中运行.
这段时间我一直在想Linux的CFS保证所有优先级都会得到适当的份额(基于权重).但是这证明了任何进入CPU而没有休眠的线程,阻止所有其他低优先级线程运行.
Plz回答如果有人知道为什么CFS调度程序以这种方式运行并且是否有办法纠正这个问题?
解决方法:
实时调度类总是先占任何较低的调度类.也就是说,具有SCHED_RR的线程(如果它已准备好运行)将始终抢占具有SCHED_OTHER的线程.这些类只应用于执行(通常很短的)紧急任务,这些任务是满足其他线程需求,硬件需求(例如从串口或网卡缓冲区读取)或出于安全目的(如编写审计或记录条目,或提交数据库事务).例如,用户模式设备驱动程序可能会使用这些优先级,因为它们必须完成其工作才能运行其他线程.
类似地,在SCHED_RR中,如果准备就绪,则优先级较高的进程将始终运行,这解释了您所看到的内容.
关键是:设置是关于CPU的优先访问,而不是共享对CPU的访问.优先级越高,总是如此.这就是优先考虑的意义.
(为了防止病态情况,实时进程默认限制为使用95%的CPU时间.这在健康的系统中永远不会发生.)
如果您只是希望线程拥有更多的一般资源份额,则应使用SCHED_OTHER并使用nice(2)或setpriority(2)将nice(2)值设置为负数.
> http://man7.org/linux/man-pages/man2/setpriority.2.html
很好(2)是关于共享CPU,因为它很好分享.
内容总结
以上是互联网集市为您收集整理的Linux – 当优先级较高的任务繁忙时,不会调度优先级较低的线程全部内容,希望文章能够帮你解决Linux – 当优先级较高的任务繁忙时,不会调度优先级较低的线程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。