我在Linux中使用pthread.我想通过设置参数sched_param.priority
来增加线程优先级.然而,我在网上找不到太多关于我可以设置的线程优先级范围的信息,或者关于线程优先级的描述.
另外,我想知道相对线程优先级,因为我不想将线程优先级设置得太高,从而导致操作系统停止.有人能帮我吗?
我在Linux中使用pthread.我想通过设置参数sched_param.priority
来增加线程优先级.然而,我在网上找不到太多关于我可以设置的线程优先级范围的信息,或者关于线程优先级的描述.
另外,我想知道相对线程优先级,因为我不想将线程优先级设置得太高,从而导致操作系统停止.有人能帮我吗?
默认的Linux调度策略是SCHED_OTHER
,它没有优先级 Select ,但在策略内部需要调整nice
级.
您必须使用函数pthread_setschedparam
切换到另一个scheduling policy(另请参见man sched_setscheduler
)
"正常"调度策略:(从sched_setscheduler(2)
开始)
SCHED_OTHER the standard round-robin time-sharing policy;
SCHED_BATCH for "batch" style execution of processes; and
SCHED_IDLE for running very low priority background jobs.
实时调度策略:
SCHED_FIFO a first-in, first-out policy; and
SCHED_RR a round-robin policy.
在您的情况下,也许您可以使用SCHED_BATCH
,因为这不需要root权限.
Warning:错误使用实时调度策略可能会挂起系统.这就是为什么需要root权限来执行这种操作.
Just to be sure of what your machine is capable of, you can use chrt
tool from
util-linux
package.
As an example:
$ chrt -m
SCHED_OTHER min/max priority : 0/0
SCHED_FIFO min/max priority : 1/99
SCHED_RR min/max priority : 1/99
SCHED_BATCH min/max priority : 0/0
SCHED_IDLE min/max priority : 0/0
减少waste分钟的方法(我经常使用):
alias batchmake='time chrt --batch 0 make --silent'
在保持用户权限的同时,这将使make
%的用户权限提高15%(在我的例子中).
Edit:介绍nice
、SCHED_BATCH
、SCHED_IDLE
和chrt
工具.为了准确性!:)