我在 Linux 中使用 pthread。我想通过设置参数sched_param.priority
来提高线程优先级。但是,我从网上找不到太多关于我可以设置的线程优先级范围的信息,或者关于线程优先级的描述。
另外,我想知道相对线程优先级,因为我不想将线程优先级设置得太高而导致操作系统停止。有人可以帮我解决这个问题吗?
最佳答案
默认的 Linux 调度策略是 SCHED_OTHER
,它没有优先级选择,只有 nice
级别可以在策略内部进行调整。
您必须使用函数 pthread_setschedparam
更改为另一个 调度策略(另请参阅 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 权限。
警告:错误使用实时调度策略可能会挂起您的系统。这就是为什么您需要 root 权限才能执行此类操作。
为了确定您的机器的能力,您可以使用 chrt
工具
util-linux
包。
举个例子:
$ 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
一种浪费更少时间的方法(我经常使用):
alias batchmake='time chrt --batch 0 make --silent'
在保持用户权限的同时,这将 make
提高了 15%(在我的例子中)。
编辑:引入nice
、SCHED_BATCH
、SCHED_IDLE
和chrt
工具。为了准确! :)
https://stackoverflow.com/questions/3649281/