Ros*_*han 8 java multithreading operating-system scheduling
在Core Java:第1卷基础-> MultiThreading一章中。
作者写道:
“所有现代台式机和服务器操作系统都使用抢占式调度。但是,诸如手机之类的较小设备可能会使用协作式调度。
我知道两种调度类型的定义/工作原理,但是想了解在较小的设备中为什么优先选择协作调度而不是抢占式调度的原因。
谁能解释原因?
协作调度相对于抢占式调度的最大好处是协作调度不使用“上下文切换”。上下文切换涉及存储和恢复应用程序(或线程)的状态。这是昂贵的。
较小的设备目前能够摆脱协作调度的原因与小型设备上只有一个用户这一事实有关。协作调度的问题是一个应用程序可能会占用 CPU。在抢占式调度中,每个应用程序最终都会有机会使用 CPU 几个周期。对于涉及多个守护进程或用户的较大系统,协作调度可能会导致问题。
减少上下文切换是现代编程中的一件大事。你可以在 Node.js、Nginx、epoll、ReactiveX 和许多其他地方看到它。
抢占式调度必须解决一个难题——从各种地方获取各种软件以有效地共享 CPU。
协作调度解决了一个简单得多的问题——允许在设计为协同工作的程序之间共享 CPU。
因此,当您可以逃避时,协作调度会更便宜、更容易。允许协作调度工作的小型设备的关键在于所有软件都来自一个供应商,并且所有程序都可以设计为协同工作。