当前位置: 首页> 娱乐> 影视 > 武汉好消息来了_写一个app多少钱_做seo推广一年大概的费用_中国seo网站

武汉好消息来了_写一个app多少钱_做seo推广一年大概的费用_中国seo网站

时间:2025/7/9 8:10:19来源:https://blog.csdn.net/mingshili/article/details/143436045 浏览次数:0次
武汉好消息来了_写一个app多少钱_做seo推广一年大概的费用_中国seo网站

文章目录

  • 1. 有哪些调度策略?
    • 1.1 SCHED_OTHER
    • 1.2 SCHED_FIFO
    • 1.3 SCHED_RR
    • 1.4 SCHED_BATACH
    • 1.5 SCHED_IDLE
  • 2. 调度设置
  • 3. 经验总结
  • Reference

参考文档:linux 官方doc:https://docs.kernel.org/scheduler/sched-rt-group.html
https://zhuanlan.zhihu.com/p/686081665
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux_for_real_time/7/html/tuning_guide/real_time_throttling#Real_Time_Throttling

1. 有哪些调度策略?

  • 通过chrt –m可以查看当前系统支持的调度策略

1.1 SCHED_OTHER

  • 普通进程调度策略
  • 也是将线程的调度策略设置为默认的动态优先级调度(通常是基于负载的调度),可以使用SCHED_OTHER策略
  • 是常规调度策略,不支持线程优先级设置,只使用默认优先级0

1.2 SCHED_FIFO

  • 实时进程调度策略,支持线程优先级设置,设置范围1-99
  • 先到先服务 ; 进程 一旦 占有 CPU , 就一直运行 , 直到 有更高优先级的进程到达 时才放弃 CPU , 或者 进程自己放弃 CPU ;
  • 等待进程主动放弃 才可以执行其它优先级相同的任务
  • 所以这个调度策略是对普通进程来说是抢占式的
  • 这个策略受到系统的两个参数控制,用于防止这种抢占式进程全占cpu后导致系统卡死的情况,所以系统一般在一定时间内将这种进程切换出去,只允许普通进程使用该cpu;如下设置,linux调度器为非实时进程预留5%的CPU时间片。下面的设置可能是一秒中有50ms的时间留给普通进程使用该cpu。一般默认情况下,linux系统会让实时进程只占用95%的CPU,防止系统出问题。
    • kernel.sched_rt_period_us = 1000000 # 一般为默认值
    • kernel.sched_rt_runtime_us = 950000

1.3 SCHED_RR

  • 属于实时进程调度策略
  • 时间片轮转 ; 进程分配到 CPU 时间片用于执行 , 该时间片用完后 , 该进程 放到该优先级队列的末尾 , 等待系统重新分配时间片执行 ;
  • 这种策略可能不太好就是cpu的cache命中率会影响较大,因为一直切换导致cache命中率低,从而影响总的耗时。

1.4 SCHED_BATACH

  • 保留

1.5 SCHED_IDLE

  • idle进程调度策略

2. 调度设置

# 通过 下面命令去查找调度策略参数设置。
sysctl -a | grep sched_rt
sudo sysctl –w kernel.sched_rt_runtime_us = 500000
# 可以通过终端命令对某个进程进行调度优先级修改
sudo chrt -a -f -p 20 ${pid}
# 查看某个进程的调度策略
chrt –p ${pid}
  • C++中如何对线程添加调度策略
#include <sched.h>
#include <sys/resource.h>// set SCHED_OTHER
pid_t tid = getpid();
int sched_priority = ...;
setpriority(PRIO_PROCESS, tid, sched_priority);
// set FIFO/RR schedule
struct sched_param sched_p;
memset(reinterpret_cast<void*>(&sched_p), 0, sizeof(sched_p));
sched_p.sched_priority = sched_priority;pthread_t thread = ...;
// 如果thread是std::thread, 则通过pthread_t thread = thread.native_handle();来获取底层pthread_t
int policy = SCHED_FIFO; // or SCHED_RR
int errr_no = pthread_setschedparam(thread, policy, &sched_p);

3. 经验总结

  • FIFO 虽然让进程变为实时进程,提升进程效率,但是有可能会存在其他隐藏问题,比如对于CUDA的线程有可能有一些负面影响
  • 另外FIFO虽然会加快当前线程,但是当硬件CPU不充裕的时候,会饿死普通线程,所以要注意这个策略的使用。
  • 另外,因为系统会默认实时进程只占用95%的进程,那么

Reference

  • https://cloud.tencent.com/developer/article/2253363
关键字:武汉好消息来了_写一个app多少钱_做seo推广一年大概的费用_中国seo网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: