在一个进程里,线程的调度有抢占式或者非抢占的模式。

在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前的进程使用完分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程。因此操作系统将定期的中断当前正在执行的线程,将CPU分配给在等待队列的下一个线程。所以任何一个线程都不能独占CPU。每个线程占用CPU的时间取决于进程和操作系统。进程分配给每个线程的时间很短,以至于我们感觉所有的线程是同时执行的。实际上,系统运行每个进程的时间有2毫秒,然后调度其他的线程。它同时他维持着所有的线程和循环,分配很少量的CPU时间给线程。线程的的切换和调度是如此之快,以至于感觉是所有的线程是同步执行的。

调度是什么意思?调度意味着处理器存储着将要执行完CPU时间的进程的状态和将来某个时间装载这个进程的状态而恢复其运行。然而这种方式也有不足之处,一个线程可以在任何给定的时间中断另外一个线程的执行。假设一个线程正在向一个文件做写操作,而另外一个线程中断其运行,也向同一个文件做写操作。 Windows 95/NT, UNIX使用的就是这种线程调度方式。

在非抢占的调度模式下,每个线程可以需要CPU多少时间就占用CPU多少时间。在这种调度方式下,可能一个执行时间很长的线程使得其他所有需要CPU的线程”饿死”。在处理机空闲,即该进程没有使用CPU时,系统可以允许其他的进程暂时使用CPU。占用CPU的线程拥有对CPU的控制权,只有它自己主动释放CPU时,其他的线程才可以使用CPU。一些I/O和Windows 3。x就是使用这种调度策略。

在有些操作系统里面,这两种调度策略都会用到。非抢占的调度策略在线程运行优先级一般时用到,而对于高优先级的线程调度则多采用抢占式的调度策略。如果你不确定系统采用的是那种调度策略,假设抢占的调度策略不可用是比较安全的。在设计应用程序的时候,我们认为那些占用CPU时间比较多的线程在一定的间隔是会释放CPU的控制权的,这时候系统会查看那些在等待队列里面的与当前运行的线程同一优先级或者更高的优先级的线程,而让这些线程得以使用CPU。如果系统找到一个这样的线程,就立即暂停当前执行的线程和激活满足条件的线程。如果没有找到同一优先级或更高级的线程,当前线程还继续占有CPU。当正在执行的线程想释放CPU的控制权给一个低优先级的线程,当前线程就转入睡眠状态而让低优先级的线程占有CPU。

转载于:https://www.cnblogs.com/ztteng/articles/3182858.html

线程的调度有抢占式或者非抢占 (转)相关推荐

  1. 操作系统中抢占式和非抢占式内核的区别

    编排 | strongerHuang 微信公众号 | 嵌入式专栏 操作系统分为抢占式内核和非抢占式内核,通常RTOS都是抢占式内核. 下面就来讲讲抢占式内核和非抢占式内核的内容. 非抢占式内核 非抢占 ...

  2. 非抢占式优先级调度算法_华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核...

    华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核 众所周知华为鸿蒙操作系统内核是Linux内核.而Linux内核即是抢占式内核也是非抢占式内核.设置软件优先级在优先级在0-99之间是抢占式优先级.设置 ...

  3. 抢占式和非抢占式的进程调度

    非抢占式(Nonpreemptive) 让进程运行直到结束或阻塞的调度方式 容易实现 适合专用系统,不适合通用系统 抢占式(Preemptive) 允许将逻辑上可继续运行的在运行过程暂停的调度方式 可 ...

  4. 线程的调度之协同式和抢占式

    大家好,我是神韵,是一个技术&生活博主.关于文章都是定位为基础,我不敢讲的太深入,因为我怕自己没时间.欢迎来点赞打卡,你们的行动将是我无限的动力. 今日主题是:线程的调度之协同式和抢占式 话不 ...

  5. 什么是非抢占式和抢占式调度方式?抢占式调度方法和非抢占式调度方法有哪些?

    非抢占式方式:在采用这种调度方式时,一旦把处理机分配给某进程后,就一直让它运行下去,决不会因为时钟中断或任何其它原因去抢占当前正在运行进程的处理机,直至该进程完成,或发生某事件而被阻塞时,才把处理机分 ...

  6. 抢占式调度与非抢占式调度

    资料来源 这是本人在操作系统期中考试前复习是碰到的问题,花了一些时间解决,现在记录下来. 引 在学习 CPU 调度的时候,关于抢占式.非抢占式调度方式有不理解的地方,想不到google一下就出来了很好 ...

  7. 抢占式内核与非抢占式内核

    抢占式内核 与非抢占 式内核 linux抢占 式内核与实时系统的关系 一个好的系统的进程调度机制,要兼顾三种不同的应用的需求: 1交互式应用.这种应用,着重于系统的响应速度,当系统中有大量的进程共存时 ...

  8. Windows核心编程 第七章 线程的调度、优先级和亲缘性(上)

    第7章 线程的调度.优先级和亲缘性 抢占式操作系统必须使用某种算法来确定哪些线程应该在何时调度和运行多长时间.本章将要介绍Microsoft Windows 98和Windows 2000使用的一些算 ...

  9. 阿里云服务器包年包月/按量计费/抢占式实例模式选择方法

    阿里云服务器付费模式如何选择?阿里云ECS云服务器付费模式分为包年包月.按量计费和抢占式实例三种,三者有什么区别?云服务器选择哪种付费模式更划算?阿里云百科分享阿里云服务器付费模式区别及选择方法: 阿 ...

最新文章

  1. 人工智能元老痛批IBM:沃森是个骗局,这根本不是认知
  2. notepad php必用功能,Notepad中值得一提的特性
  3. 第2章 S交换机管理平面安全
  4. openlayer右键菜单_使用OpenLayers3 添加地图鼠标右键菜单
  5. 排序算法-01冒泡排序(Python实现)
  6. SAP Spartacus BrowserPlatformLocation的初始化逻辑
  7. mysql php 入门_PHP入门教程之PHP操作MySQL的方法分析
  8. HDOJ2013_蟠桃记
  9. DTC精彩回顾—金学东:从可迁到好迁:人大金仓打造国产数据库生态 助力企业国产化转型...
  10. X86汇编语言从实模式到保护模式19:分页和动态页面分配
  11. 能运行lsdyna的服务器,ansys ls-dyna运行出错 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  12. 奇安信代码安全实验室五人入选“2020微软 MSRC 最具价值安全研究者”榜单
  13. 用于解决SQL2014安装时出现需要更新vs2010的问题
  14. c语言乐谱编辑软件怎么用的,雅乐简谱这个软件怎么使用?
  15. 联想电脑打不开摄像头
  16. 图像处理(八)图像插值算法
  17. 收集12个经典的程序员段子
  18. C#叠加合并半透明图像的两种实现
  19. 高校计算机系统提升班,计算机学院举行“康继昌智能系统班”选拔宣讲会
  20. 订单功能模块设计与实现

热门文章

  1. 第一个 mac 程序 Create-JSON-Model
  2. Linux系统运维工程师PDF文档精选
  3. DirectX下 Viewing Frustum 的详细实现
  4. yl335b分拣站单元流程图_选择单元化物流容器的必要性
  5. js按钮触发网页提醒_jquery,js页面加载时自动点击触发jq按钮-Go语言中文社区
  6. AWS — AWS VPC 虚拟专用云
  7. 5G NGC — UE 的二次鉴权(Secondary Authentication)方案
  8. Keepalived — VRRP 的 Linux 软件实现
  9. leetcode题目解答报告(1)
  10. 项目管理(一)计时计件