前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >线程的调度方式——抢占式、非抢占式

线程的调度方式——抢占式、非抢占式

作者头像
MickyInvQ
发布于 2020-09-27 08:40:43
发布于 2020-09-27 08:40:43
5.9K0
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏

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

在抢占模式下,操作系统负责分配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。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015/09/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
操做系统-线程与进程
进程切换的实质是回收当前运行进程对 CPU 的控制权,并将 CPU 控制权转交给新调度的就绪进程.
一滴水的眼泪
2020/09/24
6890
操作系统笔记【处理机调度知识】
CPU 在计算机系统中是非常重要的,但是早期的时候非常简单,是因为它像其他资源一样被一个作业所独占,不存在什么处理及分配或者调度的问题,但是随着各种多道程序的设计以及不同类型的操作系统的出现,不同的CPU的管理方法将会为用户提供不同性能的操作系统
BWH_Steven
2020/06/03
1.3K0
操作系统中常用的进程调度算法有_调度算法有哪些
先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
全栈程序员站长
2022/11/10
3K0
(十一)sleep(1)、sleep(0)和sleep(1000)的区别
操作系统中,CPU竞争有很多种策略。Unix系统使用的是时间片算法,Windows属于抢占式。
HaC
2020/12/30
7.1K0
细说进程五种状态的生老病死——双胞胎兄弟Java线程
java线程的五种状态其实要真正高清,只需要明白计算机操作系统中进程的知识,原理都是相同的。
intsmaze-刘洋
2018/08/29
1.1K0
处理器调度及算法
在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统性能(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机的调度问题便成为操作系统设计的中心问题之一。
搬砖俱乐部
2019/06/24
1.5K0
Linux进程调度器概述--Linux进程的管理与调度(十五)
调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换.
233333
2018/10/09
3.7K0
Linux进程调度器概述--Linux进程的管理与调度(十五)
【进击面试_02】Java 多线程
进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
Demo_Null
2021/03/04
3650
【进击面试_02】Java 多线程
处理器调度一、CPU调度的相关概念三、批处理系统中常用的调度算法四、交互式系统的调度算法五、多级反馈队列调度算法(重点)七、多处理器调度算法设计
一、CPU调度的相关概念 1.1 cpu调度 其任务是控制、协调进程对cpu的竞争,即按一定的调度算法从就绪队列中选择一个进程,把cpu的使用权交给被选中的进程。如果没有就绪进程,系统会安排一个系统空闲进程或idle进程进入cpu运行。 1.2 系统场景 * N个进程就绪、等待上cpu运行 * M个cpu, M>=1 * 需要决策:给哪个进程分配哪一个cpu? 1.3 cpu调度要解决的三个问题 1、按什么原则选择下一个要执行的进程:调度算法 2、何时进行选择:调度时机 3、如何让被选中的进程上cpu中运行
JavaEdge
2018/05/16
2.7K0
时间系统、进程的调度与切换
该文章介绍了Linux 系统中进程的调度、进程的优先级以及实时进程的调度策略。首先介绍了Linux 系统中的进程调度,包括不同的调度类型、调度算法和调度优先级。其次,讨论了Linux 系统中的实时进程调度,包括实时进程的定义、调度特性和实时进程的调度算法。最后,介绍了Linux 系统中进程调度的实现,包括内核中的进程管理、进程的地址空间、进程的调度和同步以及进程的内存管理。
s1mba
2017/12/28
2.5K0
时间系统、进程的调度与切换
操作系统:第三章 处理机调度与死锁
高级调度: 又称作业调度或长程调度。调度对象是作业,按照进程调度算法,决定作业的调度时机,主要用于多道批处理系统。
Here_SDUT
2022/08/08
9160
操作系统:第三章 处理机调度与死锁
常用进程调度算法_进程调度算法例题
所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。通常有以下两种进程调度方式:
全栈程序员站长
2022/11/10
1.5K0
常用进程调度算法_进程调度算法例题
操作系统-进程和线程
进程线程的区别 1、进程是什么? 是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独立运行的一段程序。 当进程激活时,操作系统就将系统的资源包括内存、I/O和CPU等分配给它,使它执行。 2、线程又是什么? 线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。每一个线程对应于它在进程中的一个函数,也就是内存中的代码段,多个线程执行时CPU会根据它们的优先级分配时间,使它们完成自己的功能。 一般来说,进程中至少一个线程,一个主线程和其他线程组成一个进程。多个线程的目的在于分享CPU的时间片,从而完成并行任务。
用户2909867
2018/08/22
1K0
漫谈进程和线程
我们知道文件是对I/O设备的抽象,虚拟存储器是对文件和主存的抽象,指令集是对CPU的抽象,进程是对指令集和虚拟存储器的抽象。如下图所示 。
木可大大
2018/04/02
2.1K6
漫谈进程和线程
一篇文章带你「重新认识」线程上下文切换怎么玩儿
当一个计算机是多道程序设计系统时,会频繁的有很多进程或者线程来同时竞争 CPU 时间片。当两个或两个以上的进程/线程处于就绪状态时,就会发生这种情况。如果只有一个 CPU 可用,那么必须选择接下来哪个进程/线程可以运行。操作系统中有一个叫做 调度程序(scheduler) 的角色存在,它就是做这件事儿的,该程序使用的算法叫做 调度算法(scheduling algorithm) 。
cxuan
2020/02/26
6380
一篇文章带你「重新认识」线程上下文切换怎么玩儿
Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)
死锁(deadlock) 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件。 1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。 2)请求和保持条
三丰SanFeng
2018/01/16
2.9K1
Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)
其他篇之操作系统——进程管理
(2)不考虑缓存情况,CPU能且只能对内存进行读写,不能访问外设(输入输出设备);
一半是我
2020/04/26
7190
【STM32F429】第13章 任务调度—抢占式,时间片和合作式
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第13章 任务调度—抢占式,时间片和合作式 本章教
Simon223
2021/06/24
4490
实时和非实时操作系统有什么区别?
实时操作系统,当外界事件和数据产生时,系统能以足够快的速度予以处理,其处理结果能在规定的时间内控制生产结果或对系统做出响应,并控制所有实时任务协调一致运行的操作系统。
刘盼
2023/11/24
1.4K0
实时和非实时操作系统有什么区别?
写给吃瓜群众的 Linux 进程调度剖析
在上一篇文章中介绍了 Linux 内核是如何对进程进行管理的,这篇将阐述内核是如何对进程进行调度。因为这篇文章努力用简单的语言把进程调度这件事情描述清楚,所以文章篇幅略长,建议收藏慢看。也欢迎关注公众号 CS 实验室 ,目前在写一些开发中常用但不常了解细节的东西,比如 Linux 内核、Python 进阶。
CS实验室
2021/03/22
5890
写给吃瓜群众的 Linux 进程调度剖析
推荐阅读
相关推荐
操做系统-线程与进程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档