首页 > 解决方案 > 如何为线程选择优先级?

问题描述

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

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

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

标签: multithreadingoperating-systemkernel

解决方案


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

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

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

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

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

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


推荐阅读