Linux线程优先级对调度影响

首先,Linux是一个时分操作系统,普通线程每次被调度获得运行的最长时间是确定的,即一个tick,通过内核 CONFIG_HZ可配置。在tick中断时会发生,内核会触发线程调度;同时,当前正在运行的线程主动让出CPU时,也会触发调度。除此之外,其它中断、系统调用等也能触发线程调度。

linux线程优先级的范围是 0 ~ 139,值越小,优先级越高。user space 线程优先级的范围是 100 ~ 139,默认创建的线程优先级是120,对应的nice值是0,nice值的范围是 -20 ~ 19,对应的优先级是 100 ~ 139。只有内核线程才支持低于100的优先级,优先级低于100的线程称为RT级线程。

在user space中,可以设置线程的nice值,nice值越小,该线程通过调度获得运行的机会越大。但不是说nice值小的线程占有CPU直到执行完毕,nice值大的线程才能获取CPU。比如:2个相同执行体,不同nice值的线程,每个线程运行时间为5个tick,两线程同时启动,在每次tick中断发生时,内核调度nice值小的线程的概率是3/4, nice值大的线程的概率是1/4,这样,nice值小的线程会早于nice值大的线程执行完毕,但在nice值小的线程执行完毕时,nice值大的线程也肯定获得过运行,比如1个tick。而不会像RTOS那样,高优先级的线程执行完毕前,低优先级的线程是得不到CPU运行的。

在内核中,可以设置某个线程为RT级,即优先级值低于100,同时必须设置该线程相应的调度策略(SCHED_FIFO或SCHED_RR )。RT级线程能最大限度地优先获得CPU,并且优先级高的线程一定优先被调度。但是,对于整个系统,所有RT级线程对CPU占用有个限制,即不能在 sched_rt_period_us 时间内连续占用超过 sched_rt_runtime_us。(这两个值位于/proc/sys/kernel/sched_rt_period_us 和 /proc/sys/kernel/sched_rt_runtime_us),超过了,内核就是调度普通线程。

Linux中,线程优先级可以通过sched_param结构体中的sched_priority字段来设置。可以使用pthread_attr_setschedparam函数来设置线程优先级,传入的参数为一个指向pthread_attr_t结构体的指针和一个指向sched_param结构体的指针。通过设置sched_param结构体中的sched_priority字段来设置线程优先级优先级范围为0~99,其中0为普通优先级,数值越大优先级越高。 此外,Linux中的线程优先级可以分为静态优先级和动态优先级。静态优先级范围为0~99,其中0级为普通优先级,1~99级为实时线程。动态优先级是指在静态优先级为0时,通过nice值来区分优先级,nice值范围为-19~20,nice值越大,优先级越低。例如,如果有两个静态优先级为0的线程p1和p2,p1的nice值为20,p2的nice值为-10,则p2的优先级比p1更高。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Linux 线程调度优先级](https://blog.csdn.net/modi000/article/details/125077677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Linux-线程调度优先级](https://blog.csdn.net/u014583317/article/details/109413059)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值