它是否还考虑了特定线程属于哪个进程?否则,进程似乎很容易通过创建更多线程来占用所有CPU。
错误的问题。考虑两个尝试通过执行相同的工作来解决完全相同的问题的作业,并且完全相同,除了一件事 - 一个使用数十个线程,另一个使用数十个进程。为什么使用数十个进程的进程比使用数十个进程的进程获得更多的CPU时间?
你的公平观念并不是一个明智的观点。
相反,调度更多地是围绕尝试每单位时间尽可能多地完成工作而设计的。假设计算机正在做的所有事情都是有用的,它有利于竞争任务,以便尽快完成与其竞争的其他任务。
这实际上是绝大多数时候你需要的。但偶尔你会遇到不起作用的特殊情况。一个是超高优先级的任务,如保持视频或音频流动或保持用户界面响应。另一个是超低优先级的任务,你需要完成大量工作,并且你不希望系统在你工作的时候长时间保持缓慢。优先级用于此,并且通常系统允许较高优先级的线程中断较低优先级的线程以保持响应性。
通常,“公平线程调度”试图为每个线程提供相等的CPU时间(无论进程中的所有线程获得多少CPU时间);并且“公平进程调度”试图给每个进程提供相同数量的CPU时间(例如,通过给属于不同进程的线程提供不等量的CPU时间)。这些是互斥的 - 你不能同时拥有它们(除非每个进程具有相同数量的线程)。
请注意,无论如何,这都是一个破碎的笑话。例如,如果一个线程在由于热量限制而运行缓慢的CPU(和/或因为同一内核中的另一个逻辑CPU忙)而获得10毫秒的时间,并且另一个线程在CPU上获得10毫秒的时间比正常运行速度更快(例如由于“turbo-boost”和/或因为核心中的其他逻辑CPU未被使用);然后这些线程已经收到了相同数量的CPU时间,但没有收到任何可以被认为是“公平”的东西(因为一个线程可能能够完成比另一个更多的工作20倍)。
请注意,无论如何它都是不受欢迎的。例如,对于一个好的操作系统,线程将被赋予优先级,以指示它们的工作有多重要,并且您不希望高优先级线程(执行非常重要的工作)获得相同的“公平共享”CPU时间作为低优先级线程(做无关紧要/不重要的工作)。对于两个线程具有相同优先级的情况,您(理论上)可能希望它们获得“相等”的CPU时间量;但在实践中,这并不常见,并且线程经常阻塞和解除阻塞,因此不值得关注;在实践中,它可以导致“两个半完成的工作而不是一个完成的工作和一个未启动的工作”方案,这增加了工作(例如工作请求)完成所需的平均时间。
如果线程是调度的基本单位(这些天通常是安全的假设),那么进程调度程序就是决定分配CPU的人。如何(以及是否)考虑线程使用是完全由系统特定的。并且行为ma取决于过程的类型。例如,在VMS(并在Windoze中采用)中,实时流程的处理方式与其他类型的流程不同。
在VMS类型调度中,具有更多线程的进程在设计上获得更多CPU。更适合应用程序使用更多线程并使其使用更多进程。
请记住,系统可能会对进程中的线程数施加限制。