首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >协同调度还是抢占调度?

协同调度还是抢占调度?
EN

Stack Overflow用户
提问于 2017-09-02 16:01:18
回答 6查看 9.2K关注 0票数 18

在Core :第1卷基础->章MultiThreading一书中。

提交人写道:

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

我知道这两种类型的调度的定义/工作方式,但我想了解为什么在较小的设备中,协作调度比抢占调度更可取。

有谁能解释原因吗?

EN

回答 6

Stack Overflow用户

发布于 2017-09-02 16:13:52

协同调度优于抢占调度的最大优点是协作调度不使用“上下文切换”。上下文切换涉及存储和恢复应用程序(或线程)的状态。这太昂贵了。

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

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

票数 6
EN

Stack Overflow用户

发布于 2017-09-02 16:32:22

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

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

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

票数 6
EN

Stack Overflow用户

发布于 2020-02-13 19:29:05

首先,您必须找到单词Preemption的含义。

抢占是指在不需要计算机系统合作的情况下,暂时中断计算机系统正在执行的任务,并打算在以后恢复任务的行为。执行任务的这种更改称为上下文切换。((computing))

因此,区别在于

  • 抢占式模型中,允许操作系统的线程调度器在任何时候从一个线程到另一个线程进行控制(任务可以强制挂起)。
  • 协作模型中,一旦给定线程控制,它就会继续运行,直到显式地产生控制(将CPU切换到下一个任务)或直到阻塞为止。

这两种模式各有优缺点。当CPU不得不运行各种互不相关的软件时,抢占式调度工作得更好。协同调度在运行设计为协同工作的程序时效果更好。

协作调度线程的示例:

  1. 窗口纤维(https://learn.microsoft.com/en-gb/windows/win32/procthread/fibers?redirectedfrom=MSDN)
  2. 索尼的PlayStation 4 SDK (Naughty.pdf)

如果您想学习这些协作调度纤维的下划线实现,请参阅本书(https://www.gameenginebook.com/)。

你的书上说,“小型设备如手机”,可能是作者指的是几年前的手机。他们只有很少的程序可以运行,而且都是由手机制造商提供的。所以我们可以假设这些程序是一起设计的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46015648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档