协作式调度与抢先式调度?

在《核心Java:第1卷基础->章多线程》一书中

作者写道:

“所有现代桌面和服务器操作系统都使用抢占式调度。但是,手机等较小的设备可能会使用协作调度。

我知道这两种类型的调度的定义/工作原理,但想了解为什么在较小的设备中合作调度比抢占式调度更受欢迎的原因。

谁能解释原因?


答案 1

与抢占式相比,协作调度的最大好处是协作调度不使用“上下文切换”。上下文切换涉及存储和还原应用程序(或线程)的状态。这是代价高昂的。

小型设备现在能够摆脱协作调度的原因与小型设备上只有一个用户的事实有关。协作调度的问题在于,一个应用程序可能会占用 CPU。在抢占式调度中,每个应用程序最终都将有机会使用 CPU 几个周期。对于涉及多个恶魔或用户的较大系统,协作调度可能会导致问题。

在现代编程中,减少上下文切换是一件大事。你可以在Node.js,Nginx,epoll,ReactiveX和许多其他地方看到它。


答案 2

抢占式调度必须解决一个难题 - 从各种地方获取各种软件以有效地共享CPU。

协作调度解决了一个更简单的问题 - 允许在设计为协同工作的程序之间共享CPU。

因此,当您可以逃脱时,合作调度更便宜,更容易。允许协作调度工作的小型设备的关键是,所有软件都来自一个供应商,所有程序都可以设计为协同工作。