线程的调度之协同式和抢占式
大家好,我是神韵,是一个技术&生活博主。关于文章都是定位为基础,我不敢讲的太深入,因为我怕自己没时间。欢迎来点赞打卡,你们的行动将是我无限的动力。
今日主题是:线程的调度之协同式和抢占式
话不多说,下面进入今天主题
线程调度是指系统为线程分配处理器(CPU)使用权的过程。通俗点就是线程需要得到CPU的使用权才可以进行工作,而CPU使用权是系统给线程分配的,系统分配CPU使用权给相应线程这个过程就是线程调度。其调度方式主要分为两种:
- 协同式线程调度 Cooperative Threads-Scheduling
- 抢占式线程调度 Preemptive Threads-Scheduling
1、协同式线程调度
协同就是指线程的执行时间由线程本身来控制,线程把自己的工作执行完之后,要主动通知系统切换到另一个线程上。
- 优点:实现简单,线程干完事情才切换线程,没有上下文切换操作,省CPU资源。
- 缺点:易阻塞,一直占有CPU阻塞不让出使用权,可能会导致整个系统崩溃。
2、抢占式线程调度
线程的切换不由线程本身决定,是系统控制的。也就是说线程本身是没有办法主动获得可控的执行时间的,但是可以让出执行时间,比如Java中的Thread.yield()。Java线程调度属于抢占式线程调度。
- 优点:不易阻塞
- 缺点:因为线程切换由系统控制,线程上下文切换会比较频繁,消耗比较多的CPU资源。
Java线程调度是可抢占式的,但是Java还提供了优先级10个级别,可以让高优先级的线程容易获取CPU使用权,从而总体来说执行时间会多。
但是这个优先级不是那么靠谱,因为通过JC01文章可知,Java线程是用户线程加轻量级进程混合实现,并且用户线程:轻量级进程:内核线程=1:1:1的关系,那么Java线程的优先级就要映射到内核线程,从而遵循内核线程的优先级别才能使得Java线程优先级别生效。但是内核线程是7个级别,Java是10个,所以就有了一定不可靠性,下面是它们的对应关系:
本文结束!
线程的调度之协同式和抢占式相关推荐
- C#进程调度的模拟实现:模拟先来先服务调度算法、短作业优先调度算法和优先级调度算法(考虑非抢占式和抢占式),进行算法评价,输出调度结果和算法评价指标。
没什么水平,希望能帮到你 环境:visual studio 2019 附带工程资源:C#进程调度的模拟实现附带资源-C#文档类资源-CSDN下载 先来先服务的调度算法:是一种非抢占式的算法,先来先服务 ...
- 什么是非抢占式和抢占式调度方式?抢占式调度方法和非抢占式调度方法有哪些?
非抢占式方式:在采用这种调度方式时,一旦把处理机分配给某进程后,就一直让它运行下去,决不会因为时钟中断或任何其它原因去抢占当前正在运行进程的处理机,直至该进程完成,或发生某事件而被阻塞时,才把处理机分 ...
- 非可抢占式和抢占式进程调度的区别是什么?
1) 非抢占式优先权算法 在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成:或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最 ...
- 分时调度和抢占式调度
分时调度 所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间. 抢占式调度 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用 ...
- 抢占式调度与非抢占式调度
资料来源 这是本人在操作系统期中考试前复习是碰到的问题,花了一些时间解决,现在记录下来. 引 在学习 CPU 调度的时候,关于抢占式.非抢占式调度方式有不理解的地方,想不到google一下就出来了很好 ...
- 线程的调度有抢占式或者非抢占 (转)
在一个进程里,线程的调度有抢占式或者非抢占的模式. 在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前的进程使用完分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程.因 ...
- java线程抢占式执行,Java并发基础(一)-线程基础
原标题:Java并发基础(一)-线程基础 只要涉及到线程,其运行结果就是不确定的,虽然说java很早就提供了线程以及并发的支持,但是我们需要知道,线程是完全交给调度器的.有很多同学在编写书上的代码时, ...
- 【项目介绍】协程——C语言实现的用户态非抢占式轻量级线程
文章目录 项目介绍 开发语言 开发环境 项目简介 项目特点 适用场景 发布链接 使用介绍 上下文环境 宏 协程状态 协程与调度器结构体 接口 示范用例 使用协程实现一个TCP服务器 项目介绍 开发语言 ...
- 深度解密Go语言之基于信号的抢占式调度
不知道大家在实际工作中有没有遇到过老版本 Go 调度器的坑:死循环导致程序"死机".我去年就遇到过,并且搞出了一起 P0 事故,还写了篇弱智的找 bug 文章. 识别事故的本质,并 ...
最新文章
- Apache与Tomcat联系及区别
- neo4j安装_Neo4J和Enterprise Java的撤消功能
- 剑指offer:表示数值的字符串cpp题解:指针
- Class类文件的结构
- Java 8中的HashMap性能改进
- IOS背景半透明渐变问题
- 软件架构设计_软件架构设计的三个维度,软件架构师需要知道的点,了解一下吧...
- Android安全问题 抢先开机启动
- 分布式工作笔记001---分布式系统中CAP 定理的含义
- android adb模拟点击,Android adb 模拟滑动 按键 点击事件(示例代码)
- 找出一个字符串中的数字
- 直销模式系统开发|双轨制度跟级差制度哪个模式比较好?
- 内点法解不等式约束的优化问题
- (Note)CIE色度图
- CK-GW06-E01与恩基士PLC配置指南
- 「今天14:30」AI+经济学 Debate 现场,记得来啊 | AI TIME 27
- 公钥秘钥及加签验签那些事儿
- python识别人脸的年龄和性别_人脸识别是如何判断性别和年龄的?
- 银联在线支付5.0.0版-仿真端
- python将字符串s和换行符写入文件fp_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...