c++ - 如何提高 pthreads 中的线程优先级?

我在 Linux 中使用 pthread。我想通过设置参数sched_pa​​ram.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%(在我的例子中)。

编辑:引入niceSCHED_BATCHSCHED_IDLEchrt工具。为了准确! :)

https://stackoverflow.com/questions/3649281/

相关文章:

linux - initrd 和 initramfs 的区别?

regex - sed - 注释与特定字符串匹配且尚未注释掉的行

linux - 如何使用调试版的 libc

c++ - .o 文件与 .a 文件

python - "sys.argv[1]"是什么意思?

python - 以 Unix 时间戳格式获取当前 GMT 时间的最简单方法是什么?

python - 如何使用列的格式字符串显示 float 的pandas DataFrame?

python - 在单行中打印不带括号的列表

linux - 使用 Wget 发布请求?

python - 如何找到列表交集?