gpt4 book ai didi

multithreading - 如何保证跨进程线程调度的公平性?

转载 作者:行者123 更新时间:2023-12-04 21:03:07 30 4
gpt4 key购买 nike

每个进程至少有一个执行线程,我在某处读到现代操作系统只调度线程而不是进程。

因此,如果系统中有两个进程在运行——P1 有 1 个线程,P2 有 100 个线程,操作系统调度算法将如何确保 P1 和 P2 获得大致相同的 CPU 时间?如果操作系统盲目调度线程,P2 将获得比 P1 多 100 倍的 CPU 时间。

它是否还考虑了特定线程属于哪个进程?否则,进程通过创建更多线程来占用所有 CPU 似乎太容易了。

最佳答案

一般情况下,“公平线程调度”试图给每个线程等量的 CPU 时间(不管进程中的所有线程获得多少 CPU 时间);和“公平进程调度”试图给每个进程相同数量的 CPU 时间(例如,通过给属于不同进程的线程不等量的 CPU 时间)。这些是互斥的——你不能同时拥有(除非每个进程都有相同数量的线程)。

请注意,无论如何,这都是一个破玩笑。例如,如果一个线程在 CPU 上获得 10 毫秒的时间,该 CPU 由于热节流(和/或因为同一内核中的另一个逻辑 CPU 忙)而运行缓慢,而另一个线程在 CPU 上获得 10 毫秒的时间,该 CPU 是运行速度比正常情况快(例如,由于“turbo-boost”和/或因为未使用内核中的其他逻辑 CPU);那么这些线程获得了等量的 CPU 时间,但没有获得任何可以被视为“公平”的东西(因为一个线程完成的工作可能是另一个线程的 20 倍)。

请注意,无论如何这都是不需要的。例如,对于一个好的操作系统线程将被赋予优先级以表明它们所做的工作有多重要,并且您不希望高优先级线程(执行非常重要的工作)获得相同的 CPU 时间“公平份额”作为低优先级线程(做不相关/不重要的工作)。对于两个线程具有相同优先级的情况,您可能(理论上)希望它们获得“相等”的 CPU 时间;但实际上这并不常见,线程阻塞和解除阻塞的频率如此之高,以至于不值得关心;在实践中,它可能导致“两个半完成的工作,而不是一个完成的工作和一个未开始的工作”的情况,从而增加完成工作(例如工作请求)所需的平均时间。

关于multithreading - 如何保证跨进程线程调度的公平性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53962825/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com