我在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:介绍niceSCHED_BATCHSCHED_IDLEchrt工具.为了准确性!:)

Linux相关问答推荐

在不影响ROS2安装的情况下更新Ubuntu Linux中的CMake

为什么在已连接的设备上调用 btmgmt conn-info 返回:状态 0x02(未连接)

Postfix 连接到 domain.com[74.208.61.85]:587: 连接被 dovecot、opendkim 和 SSL 拒绝

Docker 不保留 chown 用户设置

Linux 'column' 实用程序的使用

如何在vim中使用正则表达式来切换文件中所有字符的大小写

使用 sed 从文本文件中删除特定字符串

问题:Virtio rpmsg 总线 virtio0:收到的 msg 没有收件人 - 在 Yocto Hardknott - imx7d-pico

如何为 Linux 构建 Visual C++ 项目?

linux远程执行命令

如何在 linux ElementaryOS 中修复 Genymotion,但未找到错误CXXABI_1.3.8

如何将整个文件夹从 Amazon EC2 Linux 实例复制到本地 Linux 机器?

如何在不包括可用空间的情况下创建光盘(sd 卡)的 .IMG 映像?

Linux命令删除.git文件夹以外的所有文件?

有没有办法在整个项目代码中的某个日期之后找出更改的文件?

如何删除 Mercurial 存储库

cmake : 从脚本设置环境变量

Linux 的文本编辑器(除了 Vi)?

id_rsa.pub 文件 SSH 错误:格式无效

Linux 上 POSIX AIO 和 libaio 的区别?