如何选择线程的优先级?

Posted

技术标签:

【中文标题】如何选择线程的优先级?【英文标题】:How to chose priority for threads? 【发布时间】:2021-10-18 02:03:20 【问题描述】:

考虑一个核心,当多个请求以相同的时间戳到达服务器时,并且都具有相同的优先级,线程将首先分配给哪个请求?

例如:CPU 有单核,有 2 个线程。现在这 4 个人已经向任何服务器发出了请求(进程)A、B、C、D,服务器需要在消息队列中分配线程才能处理这些请求。但是哪 2 个进程将有机会首先分配这 2 个线程?

假设它们都以相同的时间戳到达并且具有相同的优先级。

【问题讨论】:

你描述的不太可能。监听套接字最终只有一个接受队列,因此没有并发请求之类的东西。但一般来说,它是具有相同优先级的线程之间的随机或循环。 这个问题似乎是关于在用户空间(处理器的非特权模式)中编程。为什么要使用“内核”标签来解决有关操作系统 内核(处理器的特权模式)的问题? 【参考方案1】:

TUSHAR,这里出现了一点语言鸿沟。考虑到您选择了kernel,并且似乎不认为它与代数有关,我将翻译您的问题:

在单 CPU 系统中,当多个中断被断言时 同时,并且都具有相同的优先级,哪个处理程序将是 优先服务?

第一个信息是大多数中断控制器只不过是一个带有一些额外粘合剂的优先级编码器。因此,他们没有相同优先级的概念,但这并没有你想象的那么重要。

实时操作系统,尤其是寻求将其实现与硬件分离,甚至可以动态调整中断优先级以适应当前的工作负载。这里的关键是操作系统在中断控制器的支配下花费最少的时间,并根据其状态选择要做什么。作为系统设计者,您可以选择发生的事情。

分时操作系统对此也有一些控制;但通常较少,因为他们争取最大吞吐量而不是可预测的响应。因此,他们可能会做任何事情,从先到先得、随机服务,甚至随机饥饿。

因此,您的问题的答案取决于您的环境。在大多数情况下,如果您有一个非常简单的环境(例如,像 vxWorks 或 freeRTOS 这样的执行程序),希望它遵循中断控制器的指令。如果您有更复杂的设备操作系统(例如 INTEGRITY 或 QNX),则取决于您的配置。如果你有 Linux/winDOS,可能有 320 个控制旋钮都会导致烤面包。

【讨论】:

以上是关于如何选择线程的优先级?的主要内容,如果未能解决你的问题,请参考以下文章

java 22 - 6 多线程之线程调度和设置线程的优先级

css选择器有哪些?哪些属性可以继承?优先级算法如何计算?新增的伪类有哪些?

Mysql如何根据优先级进行选择

如何在选择期间优先考虑空值

怎样改变Android系统的网络优先级?

Java 并发 线程属性