跨进程如何确保线程调度的公平性?

Pra*_*abu 5 multithreading operating-system scheduling

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

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

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

Dav*_*rtz 2

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

错误的问题。考虑两个作业,它们试图通过执行相同的工作来解决完全相同的问题,并且除了一件事之外完全相同 - 一个使用数十个线程,另一个使用数十个进程。为什么使用几十个进程的进程比使用几十个线程的进程获得更多的 CPU 时间?

你的公平观念并不是一种明智的观念。

相反,日程安排更多地是为了在单位时间内完成尽可能多的工作而设计的。假设计算机所做的一切都是有用的,并且有利于竞争任务,让与它们竞争的其他任务也尽快完成。

这实际上是您在绝大多数情况下所需要的。但有时您会遇到特殊情况,这不起作用。一是超高优先级任务,例如保持视频或音频流畅或保持用户界面响应。另一个是超低优先级任务,您需要完成大量工作,并且您不希望系统在您处理这些任务时长时间运行缓慢。为此使用优先级,通常系统允许较高优先级的线程中断较低优先级的线程以保持响应能力。