加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 有关pthread调度程序和优先级的问题

发布时间:2020-12-16 07:08:08 所属栏目:百科 来源:网络整理
导读:我在Debian 7上使用 gcc c 4.7.我想为我的线程设置一些优先级.看起来我必须通过pthread来做到这一点.我对调度程序策略和pthread中的优先级感到困惑. Q1: 我在我的c代码中使用sched_setscheduler将线程调度程序设置为SCHED_RR.这个过程中的所有线程都会使用
我在Debian 7上使用 gcc c 4.7.我想为我的线程设置一些优先级.看起来我必须通过pthread来做到这一点.我对调度程序策略和pthread中的优先级感到困惑.

Q1:

我在我的c代码中使用sched_setscheduler将线程调度程序设置为SCHED_RR.这个过程中的所有线程都会使用这个实时调度程序吗?或者我可以在一个进程中针对不同的线程使用不同的调度程序策略?

Q2:

线程优先级是仅在进程内部还是跨多个进程生效?例如.我有两个使用SCHED_RR的进程.一个具有优先级为99的线程,另一个具有优先级为98的线程.前一个线程的优先级高于后者吗?如果线程使用不同的调度程序,如何比较它们的优先级怎么办?

Q3:

我应该使用什么“默认”号码作为调度程序的优先级?例如.我使用下面的代码:

struct sched_param param;
param.sched_priority = default_priority;
sched_setscheduler(0,SCHED_RR,&param));

我应该将什么值设置为default_priority?我的程序中有一些高优先级线程,普通优先级线程和一些低优先级线程.在1-99中,我应该使用多少个优先级?

Q4:

进程优先级和线程优先级混合.例如,我可以使用nice来设置进程优先级.如果一个进程具有较低的进程优先级,但在我的代码中,我将其线程设置为高优先级.这会覆盖进程优先级设置吗?

解决方法

我用Google搜索并阅读各种文件.我想我可以在这里回答我自己的问题.

Pthread具有争用范围属性.它可能是PTHREAD_SCOPE_SYSTEM或PTHREAD_SCOPE_PROCESS.它不需要在它们上实现. Linux仅支持PTHREAD_SCOPE_SYSTEM,这意味着来自所有进程的所有线程都相互竞争.此外,在Linux中,线程本质上是一个轻量级进程.进程调度程序不会在调度中以不同方式处理进程和线程.

解答.
Q1:
同一进程中的线程可以有不同的调度策略和优先级.

Q2:
线程跨进程竞争.

Q3:
我可以使用一些任意数字.每个优先级(从1到99)将在调度中拥有自己的队列.

Q4:
nice值在Linux默认SCHED_OTHER策略中使用.当SCHED_RR或SCHED_FIFO等实时策略用于线程时,nice值无效.由于SCHED_RR和SCHED_FIFO的最小优先级为1,SCHED_OTHER的优先级只能为0.因此,具有实时策略的线程始终具有调度优先级而非非实时优先级.

答案仅适用于Linux.其他操作系统如BSD,Solaris可能有不同的pthread实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读