每个进程至少有一个线程执行,我在某个地方读到,现代操作系统只调度线程,而不是进程。
因此,如果在系统中运行两个进程--一个线程的P1进程和100个线程的P2进程,操作系统调度算法将如何确保P1和P2的CPU时间大致相同?如果OS盲目地调度线程,P2将获得比P1多100倍的CPU时间。
它是否也考虑到某个特定线程属于哪个进程?否则,一个进程似乎太容易通过创建更多的线程来占用所有的CPU。
发布于 2018-12-29 05:19:37
它是否也考虑到某个特定线程属于哪个进程?否则,一个进程似乎太容易通过创建更多的线程来占用所有的CPU。
问错问题了。考虑两个作业,它们试图通过做同样的工作来解决完全相同的问题,除了一件事之外,它们完全相同--一个使用几十个线程,另一个使用几十个进程。为什么使用数十个进程的进程比使用几十个线程的进程获得更多的CPU时间?
你的公平观念并不是一个明智的概念。
相反,调度更多地是围绕着每个单位时间尽可能多地完成工作。假设计算机所做的一切都是有用的,让其他任务与之竞争也能尽快完成,这对竞争任务是有益的。
这实际上是你所需要的绝大部分时间。但有时你会遇到一些特殊的情况,这是行不通的。一种是超高优先级的任务,如保持视频或音频的流动或保持用户界面的响应性.另一个是极低优先级的任务,你需要做大量的工作,而且你不希望系统在你工作的时候很长一段时间内慢下来。优先级用于此,通常系统允许高优先级线程中断低优先级线程以保持响应能力。
发布于 2018-12-29 05:13:07
通常,“公平线程调度”尝试给每个线程相同的CPU时间(不管进程中所有线程的CPU时间都是多少);“公平进程调度”尝试给每个进程相同的CPU时间(例如,给予属于不同进程的线程不等的CPU时间)。它们是相互排斥的--你不能两者兼得(除非每个进程都有相同数量的线程)。
请注意,不管怎样,这都是个破玩笑。例如,如果一个线程在由于热节流而运行缓慢的CPU上获得10 ms的时间(和/或因为同一核中的另一个逻辑CPU繁忙),而另一个线程在运行速度高于正常速度的CPU上获得10 ms的时间(例如,由于"turbo-boost“和/或由于核心中的另一个逻辑CPU没有被使用);那么这些线程已经收到了相同数量的CPU时间,但是没有收到任何可以被认为”公平“的东西(因为一个线程可能能够得到20倍于另一个线程所做的工作)。
请注意,无论如何,这都是多余的。例如,一个好的OS线程将被赋予一个优先级,以表明它们所做的工作有多重要,并且您不希望高优先级线程(做非常重要的工作)获得与低优先级线程相同的CPU时间“公平份额”(做无关/不重要的工作)。对于两个线程具有相同优先级的情况,您可能(理论上)希望它们获得“相等”的CPU时间;但在实践中,这并不常见,线程阻塞和取消阻塞的频率太高,因此不值得关注;在实践中,它可能导致“两个已完成的作业而不是一个已完成的作业和一个未启动的作业”的情况,从而增加作业的平均完成时间(例如,工作请求)。
发布于 2018-12-28 19:40:31
如果线程是调度的基本单元(现在通常是一个安全的假设),那么进程调度器将决定谁分配CPU。它如何(以及是否)考虑到线程的使用,完全是特定于系统的。这种行为取决于过程的类型。例如,在VMS中(Windoze采用),实时进程与其他类型的进程不同。
在VMS类型的调度中,线程多的进程通过设计可以获得更多的CPU .更好的做法是,应用程序使用更多的线程,并使用更多的进程。
请记住,系统可能会对进程中的线程数量施加限制。
https://stackoverflow.com/questions/53962825
复制相似问题