linux io优先级 默认,Linux进程优先级系统——设置实时进程优先级
发布日期:2022-02-03 15:25:08 浏览次数:4 分类:技术文章

本文共 1052 字,大约阅读时间需要 3 分钟。

前言

最近研发的产品出了点小bug,最后查到根本原因是,其中一个进程A使用基于FIFO的实时进程优先级,而另一个进程B是使用普通调度的进程优先级,而A和B两个进程是互相通信的,进程B会被饿死,而进程A也不能正常工作。分析问题过程中查找了一些资料,以下记录一些特别注意的点。

Linux进程调度的三种策略

(1)SCHED_OTHER,分时调度策略

(2)SCHED_FIFO,实时调度策略,先到先服务

(3)SCHED_RR,实时调度策略,时间片轮转

由于相关内容比较多,本人也末必比别人讲得更清楚,关于进程调度更详细的内容建议读《深入理解Linux内核》,网上的很多内容都是从此而来,也不一定比这本书讲得好。另可参考此链接

https://blog.csdn.net/maximuszhou/article/details/42042161

前面遇到bug的进程A就是使用SCHED_FIFO调度策略的,而进程B没有经过设置,默认是SCHED_OTHER。

如何设置为实时进程

查找资料的时候发现有个链接问,为什么设置FIFO策略,但和预想的不一致。链接在此 http://ask.csdn.net/questions/254095

从代码看是因为设置的方法不对,直接上代码,可以设置进程和线程的调度策略

1 #include

2 #include

3 #include

4 #include

5

6

7 pid_t pid =getpid();8 structsched_param param;9 param.sched_priority = sched_get_priority_max(SCHED_FIFO); //也可用SCHED_RR

10 sched_setscheduler(pid, SCHED_RR, &param); //设置当前进程

11 pthread_setschedparam(pthread_self(), SCHED_FIFO, &param); //设置当前线程

可以通过top命令查看进程是否成功,如果为"rt"表示是实时进程了。如果不成功,可能是权限问题,需要roo权限。

dbbb8bca71cfec0aa22703639e5c702c.png

调整进程优先级

如果不调整调度策略,也可以提升进程优先级,使得进程得到更多的CPU,特别是交互式程序,用户体检更好。代码很简单,只需要调用nice(int n)函数即可。n的有效范围是-20~19,数值越小表示优先级越高。具体内容不在此复制粘贴,还是看《深入理解Linux内核》比较靠谱。

转载地址:https://blog.csdn.net/weixin_35600779/article/details/117005192 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:两块硬盘上各装一个linux,安装一台Linux练习机
下一篇:linux ld.so.conf,Linux下常见的~/.bashrc、/etc/profile、/etc/ld.so.config小科普以及caffe编译遇到的相关问题解决...

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月18日 03时36分30秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章