当前位置: 首页 > 面试题库 >

如何在pthreads中增加线程优先级?

章增
2023-03-14
问题内容

我在Linux中使用pthread。我想通过设置参数来增加线程优先级sched_param.priority。但是,我从网上找不到有关我可以设置的线程优先级范围或有关线程优先级描述的大量信息。

另外,我想了解相对线程优先级,因为我不想将线程优先级设置得太高而导致OS停止。有人可以帮我吗?


问题答案:

默认的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'

在保持用户特权的同时,这将提升make15%(在我的情况下)。

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



 类似资料:
  • 问题内容: Java API线程优先级(1-10)如何转换为操作系统级别的优先级,因为大多数操作系统没有与此相匹配的线程优先级别(就数量而言)。 因此请记住,在某些情况下,具有不同优先级的两个或多个线程最终会在OS级别获得相同的优先级。 如果我的理解有需要更正,请澄清。 问题答案: 实际上,某些优先级可以映射到相同的“本地”优先级。这是列表(基于OpenJDK 6中的Hotspot代码): Sol

  • 问题内容: 假定下面的代码正在由10个线程执行。 为了便于说明,可以说线程是T1,T2,T3 .... T10。我的要求是,只要T1或T2或T3(即T1,T2或T3中的任何一个)正在等待获取锁,它的其他线程T4,T5,T6 .... T10都将无法获取。锁,即T1,T2和T3,应优先获得相对于其他线程的锁。 我想可以通过增加线程T1,T2和T3的优先级来完成 即这是伪代码 请注意,我想要一个适用于

  • 主要内容:1 什么是Java 线程优先级,2 Thread类线程优先级常量,3 Java 线程优先级的例子1 什么是Java 线程优先级 每个线程都有一个优先级。优先级由1到10之间的数字表示。在大多数情况下,线程计划会根据线程的优先级来调度线程(称为抢先式调度)。但是不能保证一定被调用,因为是否被调用取决于JVM选择谁来调度。 2 Thread类线程优先级常量 public static int MIN_PRIORITY public static int NORM_PRIORITY publ

  • 问题内容: 有什么办法可以在Linux中设置线程的名称? 我的主要目的是在调试时会有所帮助,并且如果通过例如暴露该名称也很好 问题答案: 将功能与选项一起使用(请参阅docs)。 请注意,旧版本的文档有些令人困惑。他们说 设置调用进程的进程名称 但是由于线程是Linux上的轻量级进程(LWP),因此在这种情况下,一个线程就是一个进程。 您可以使用或使用以下命令查看线程名称: 或在之间的: 或从GD

  • 我目前正在研究分布式应用程序的性能。我的目标是网络组件。目前,每个连接都有一个专用线程,在阻塞模式下处理套接字。我的目标是减少线程数量(不降低性能),如果可能的话,提高性能。 我重新设计了网络组件以使用异步通信,并尝试使用1到2个线程来处理整个网络。我做了一个简单的测试,我从一个节点在一个循环中写入,然后在另一个节点上读取,这是为了测试最大nw线程能力,我发现我的繁忙循环实现消耗了100%的cpu

  • 本文向大家介绍说说线程优先级?相关面试题,主要包含被问及说说线程优先级?时的应答技巧和注意事项,需要的朋友参考一下 理论上来说系统会根据优先级来决定首先使哪个线程进入运行状态。当 CPU 比较闲的时候,设置线程优先级几乎不会有任何作用,而且很多操作系统压根不会不会理会你设置的线程优先级,所以不要让业务过度依赖于线程的优先级。 另外,线程优先级具有继承特性比如 A 线程启动 B 线程,则 B 线程的