在Core :第1卷基础->章MultiThreading一书中。
提交人写道:
所有现代桌面和服务器操作系统都采用抢占式调度。但是,较小的设备,如手机,可以使用协作调度.
我知道这两种类型的调度的定义/工作方式,但我想了解为什么在较小的设备中,协作调度比抢占调度更可取。
有谁能解释原因吗?
发布于 2017-09-02 16:13:52
协同调度优于抢占调度的最大优点是协作调度不使用“上下文切换”。上下文切换涉及存储和恢复应用程序(或线程)的状态。这太昂贵了。
较小的设备现在能够摆脱协作调度的原因与小型设备上只有一个用户这一事实有关。协同调度的问题是,一个应用程序可以占用CPU。在先发制人的调度中,每个应用程序最终都将有机会在几个周期内使用CPU。对于涉及多个恶魔或用户的大型系统,协作调度可能会引起问题。
在现代编程中,减少上下文切换是一件很重要的事情。您可以在Node.js、Nginx、epoll、ReactiveX和许多其他地方看到它。
发布于 2017-09-02 16:32:22
抢占式调度必须解决一个困难的问题--从不同的地方获取各种各样的软件,以有效地共享CPU。
协作调度解决了一个简单得多的问题--允许设计在一起工作的程序之间共享CPU。
因此,当你可以逃避时,合作调度就更便宜、更容易了。允许协同调度工作的小型设备的关键是,所有的软件都来自一个供应商,所有的程序都可以设计成一起工作。
发布于 2020-02-13 19:29:05
首先,您必须找到单词Preemption的含义。
抢占是指在不需要计算机系统合作的情况下,暂时中断计算机系统正在执行的任务,并打算在以后恢复任务的行为。执行任务的这种更改称为上下文切换。((computing))
因此,区别在于
这两种模式各有优缺点。当CPU不得不运行各种互不相关的软件时,抢占式调度工作得更好。协同调度在运行设计为协同工作的程序时效果更好。
协作调度线程的示例:
如果您想学习这些协作调度纤维的下划线实现,请参阅本书(https://www.gameenginebook.com/)。
你的书上说,“小型设备如手机”,可能是作者指的是几年前的手机。他们只有很少的程序可以运行,而且都是由手机制造商提供的。所以我们可以假设这些程序是一起设计的。
https://stackoverflow.com/questions/46015648
复制相似问题