进程/线程 状态模型详解
前言:最近操作系统复习到线程的状态模型(也可以说进程的状态模型,本文直接用线程来说)时候,网上查阅资料,发现很多文章都说的很不一样,有五状态模型、六状态模型、七状态模型.......虽然都是对的,但是不乏很多刚入门的同学看了会懵,因此本文从操作系统的角度讲解线程的“五状态模型”以及后来提出的“七状态模型”,还从Java角度讲解“六状态模型”。
目录
1、前置知识
2、五状态模型
3、七状态模型
4、六状态模型
1、前置知识
①低级调度(线程调度)
按照某种算法从就绪队列中选取一个进程,将CPU分配给它。
②中级调度(内存调度)
把外存上处于挂起状态已具备运行条件的进程重新调入内存。目的是提高内存利用率和系统吞吐量。
③高级调度(作业调度)
由于内存空间有限,有时无法将用户提交的作业全部放入内存,因此需要确定某种规则来决定将作业调入内存的顺序。
高级调度是按一定的原则从外存上处于后备队列的作业中挑选一个作业,给他们分配内存等必要资源,并建立相应的进程(建立PCB)
2、五状态模型
五状态模型是从操作系统角度来描述的,状态图如下:

- 初始状态:表示线程刚被创建,还未加入就绪队列。也可以说仅是在语言层面创建了线程对象,还未与操作系统线程关联。
- 可运行状态:表明线程获取到了除CPU之外的所有资源,正在就绪队列等待CPU调度。
- 运行态:表明线程此时已经获得了CPU,正在运行。
- 阻塞态:表明此时由于某种原因不能继续运行,主动放弃CPU进入阻塞状态。
- 终止态:表示线程已经执行完毕,生命周期已经结束,不会再转换为其它状态。
过程(箭头)描述:
①:线程被创建后,经过“高级调度(作业调度)”进入就绪队列等待分配CPU时间片。
②:线程由于“低级调度(线程调度)”获得CPU时间片,开始运行。
③:线程CPU时间片用尽,回到就绪队列。
④:线程由于某种原因,主动放弃CPU进入阻塞状态。原因如:a. 竞争锁失败。b. 调用了阻塞API,如 BIO 读写文件,这时该线程实际不会用到 CPU,会导致线程上下文切换,进入“阻塞态”。
⑤:线程获得了除CPU以外的所有资源,被动的从阻塞态变为可运行态,进入阻塞队列。
⑥:表示线程已经执行完毕,生命周期已经结束,不会再转换为其它状态。
⑦:表示CPU分给运行态的线程。
3、七状态模型
七状态模型是在基于五状态模型的基础上构造的,也是从操作系统的角度来分析的,主要是在“可运行态(就绪态)”和“阻塞态”上加了两个状态:“阻塞挂起态”和“就绪挂起态”。
思想和我们“虚拟内存”的思想一样,由于随着越来越多的线程加入内存,导致内存不够用,因此暂时将一些线程调出内存,等需要用的时候再通过“中级调度(内存调度)”调入内存。
七状态图如下:

可见,七状态模型便是我们上述分析的一样,这里不做过多讲解。
4、六状态模型
六状态模型是从 Java API 层面来描述的,根据 Thread.State 枚举,分为如下六种状态:

- NEW:表示线程刚被创建,但是还没有调用 start() 方法,也就是仅仅被NEW出来。
- RUNNABLE:调用Start()方法,进入RUNNABLE。注意!这里RUNNABLE包括了我们操作系统层面的①可运行态(就绪态)②运行态 ③阻塞态。
- TIMED_WAITING:表明线程进入“有限等待”状态,此时线程会等待某个条件发生一定时间,如果在有限时间内发生则继续向下运行,如果超出有限时间条件还没发生,则直接不等待,继续向下运行。通常对应着我们Java里面的Thread.sleep(time),join(time)等方法。
- WAITING:表明线程进入“(无限)等待”状态,此时线程会一直等到条件发生才会向下继续运行。
- BLOCKED:表明线程进入Java层面的阻塞状态,如竞争synchronize锁失败则进入这个状态。
- TERMINATED:表示当前线程代码运行结束。
注意!TIMED_WAITING、WAITING、BLOCKED都是 Java API 层面对【阻塞状态】的细分。
以上是本文针对线程状态从操作系统、Java API角度来解析。大家点个关注!!!谢谢大家了!!!
相关文章:
进程/线程 状态模型详解
前言:最近操作系统复习到线程的状态模型(也可以说进程的状态模型,本文直接用线程来说)时候,网上查阅资料,发现很多文章都说的很不一样,有五状态模型、六状态模型、七状态模型.......虽然都是对的…...
数据结构与算法之队列: Leetcode 621. 任务调度器 (Typescript版)
任务调度器 https://leetcode.cn/problems/task-scheduler/ 描述 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间&#…...
【报错】arXiv上传文章出现XXX.sty not found
笔者在overleaf上编译文章一切正常,但上传文章到arxiv时出现类似于如下报错: 一般情况下观察arxiv的编译log,不通过的原因,很多时候都是由于某一行导入了啥package,引起的报错;但是如果没有任何一个具体的…...
项目合同管理
项目合同管理的基本概念及分类、项目合同签订、项目合同管理以及项目合同索赔处理等内容 信息系统工程的建设过程实际上就是合同的执行和监控的过程 1、项目合同的概念及分类 合同法律关系:权力和义务关系 合同可以是书面形式、口头形式和其他形式 书面形式是指…...
聊聊ClickHouse向量化执行引擎-过滤操作
俄罗斯Yandex开发的ClickHouse是一款性能黑马的OLAP数据库,其对SIMD的灵活运用给其带来了难以置信的性能。本文我们聊聊它如何对过滤操作进行SIMD优化。 基本思想 1、有一个数组data,即ColumnVector::data,存放数据 2、使用uint8类型…...
数据可视化第二版-拓展-网约车分析案例
文章目录 数据可视化第二版-拓展-网约车分析案例竞赛介绍 1等奖作品-IT从业者张某某的作品结论过程数据和思考数据处理数据探索数据分析方法选择数据分析相关性分析转化率分析分析结论 完单数量分析分析结论 司机数量分析分析结论 时间分析每日订单分析 工作日各时段分析周六日…...
pytest - Getting Start
前言 项目开发中有很多的功能,通常开发人员需要对自己编写的代码进行自测,除了借助postman等工具进行测试外,还需要编写单元测试对开发的代码进行测试,通过单元测试来判断代码是否能够实现需求,本文介绍的pytest模块是…...
( 字符串) 205. 同构字符串 ——【Leetcode每日一题】
❓205. 同构字符串 难度:简单 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同…...
python+django+vue消防知识宣传网站
开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 层随着移动应用技术的发展,越来越多的消防单位借助于移动手机、电脑完成生活中的事…...
彻底告别手动配置任务,魔改xxl-job!
分析 改造 1、接口调用 2、创建新注解 3、自动注册核心 4、自动装配 测试 测试后 XXL-Job是一款非常优秀的任务调度中间件,其轻量级、使用简单、支持分布式等优点,被广泛应用在我们的项目中,解决了不少定时任务的调度问题。不仅如此&a…...
【五一创作】Springboot+多环境+多数据源(MySQL+Phoenix)配置及查询(多知识点)
文章目录 1. 背景2. 技术点3 子模块依赖SpringBoot设置4. 多环境配置4.1 application.yml4.2 application-pro.yml 5. 多数据源配置5.1 yml配置5.2 自定义数据源在Java中配置5.2.1 PhoenixDataSourceConfig5.2.2 MysqlDataSourceConfig 6. 完整的Pom6. 测试6.1 Mapper配置6.2 方…...
Python小姿势 - 线程和进程:
线程和进程: Python里面线程是真正的并行执行,进程是可以并行执行的。 所谓进程,就是操作系统中执行一个程序的独立单元,它是系统进行资源分配和调度的基本单位。一个进程可以创建和撤销另一个进程,同一个进程内可以并…...
Mysql 锁
目录 0 课程视频 1 概述 1.1 多用户 并发访问 -> 为了数据一致性(多用户) 1.2 全局锁 数据库所有表 1.3 表级锁 每次操作 锁整张表 1.4 行级锁 每次操作 锁对应行 2 全局锁 ->锁后只读 -> 全库逻辑备份 2.1 阻塞DML /DDL 可DQL读 2.2 语法 2.2.1 加锁 flush…...
基于ssm的论坛系统的设计与实现【附源码】
基于ssm的论坛系统的设计与实现 摘 要 早期的网络论坛系统已经诞生一段时间,随着互联网技术的发展,它已经从最初的简单电子公告板系统变成了一种丰富的论坛系统社区模型。人们通过论坛系统进行信息的获取、发布和交流已经成为一种普遍的社交方式&#x…...
Vue中的事件修饰符
Vue中的事件修饰符: 1.prevent: 阻止默认事件 (常用) : 2.stop: 阻止事件冒泡 (常用) : 3.once: 事件只触发一次(常用) : 4.capture:使用事件的捕获模式: 5.self: 只有event.target是当前操作的元素是才触发事件; 6.passive:事件的默认行为立即执行,无需等待事件回调…...
如何保证Redis和数据库的一致性
关注我,升职加薪就是你! 当我们对数据进行修改的时候,到底是先删缓存,还是先写数据库? 1、如果先删缓存,再写数据库:在高并发场景下,当第一个线程删除了缓存,还没来得及写…...
Ubantu docker学习笔记(八)私有仓库
文章目录 一、建立HTTPS链接1.在仓库服务器上获取TLS证书1.1 生成证书颁发机构证书1.2 生成服务器证书1.3 利用证书运行仓库容器 2.让私有仓库支持HTTPS3.客户端端配置 二、基本身份验证三、对外隐藏仓库服务器3.1 在服务器端3.2 在客户端进行 四、仓库可视化 在前面的学习中&a…...
【五一创作】网络协议与攻击模拟-01-wireshark使用-捕获过滤器
协议 TCP/IP协议簇 网络接口层(没有特定的协议)PPPOE 物理层 数据链路层 网络层:IP (v4/v6) ARP (地址解析协议) RARP ICMP (Internet控制报文协议) IGMP 传输层:TCP(传输控制协议) UDP(用户数据报协议) 应用层:都是基于传输层协议的端口,总共端口0~65535 0~1023 HTTP—t…...
网络-IP地址(嵌入式学习)
IP地址 基本概念IPv4 五类:A B C D E特殊地址子网掩码子网号概念IPv6优势举个栗子 基本概念 IP地址是Internet中主机的标识 IP地址(Internet Protocol Address 互联网国际地址)是一种在Internet上的给主机编址的方式,它主要是为…...
一文介绍Linux EAS
能量感知调度(Energy Aware Scheduling,简称EAS)是目前Android手机中Linux线程调度器的基础功能,它使调度器能预测其决策对CPU能耗的影响。依靠CPU的能量模型(Energy Model,简称EM),…...
LSPosed实战:用Xposed给微信添加开发者调试菜单(免Root方案)
LSPosed高阶应用:为微信构建免Root调试菜单的技术实践 在移动应用开发领域,调试功能的便捷性直接影响开发效率。对于商业级应用如微信这样的超级App,标准的开发者选项往往无法满足深度定制需求。本文将揭示如何利用新一代LSPosed框架…...
C++开发者必看:nlohmann::json实战避坑指南(含性能优化技巧)
C开发者必看:nlohmann::json实战避坑指南(含性能优化技巧) 如果你正在用C处理JSON数据,nlohmann::json库大概率已经出现在你的项目依赖中。这个被戏称为"现代C的瑞士军刀"的库,确实让JSON操作变得像std::vec…...
别再让漏洞扫描报警了!手把手教你给老旧Linux服务器升级OpenSSH和OpenSSL(附systemd服务修复秘籍)
企业级Linux服务器安全加固实战:OpenSSH与OpenSSL深度升级指南 凌晨三点,刺耳的安全告警声再次划破运维中心的宁静——漏洞扫描报告上醒目的红色标记显示:OpenSSH 7.4存在CVE-2023-38408高危漏洞。这不是演习,而是每位运维工程师都…...
前端工程化实战:用changeset的预发布模式管理Beta版本(含Monorepo示例)
前端工程化实战:用Changeset的预发布模式管理Beta版本(含Monorepo示例) 在Monorepo架构下管理多个npm包的版本发布,一直是前端开发者面临的挑战之一。特别是当项目进入频繁迭代阶段,如何在保证稳定性的同时,…...
基于COMSOL仿真的静电梳状谐振器与MEMS加速度传感器性能研究
comsol静电梳状谐振器 MEMS加速度传感器仿真 梳齿结构在MEMS加速度计里就像精密钟表的齿轮,微小位移就能引发电容变化。最近在COMSOL里复现静电驱动谐振器时,发现梳齿间距的设置直接能让仿真结果"翻车"——不信邪的可以试试把初始间隙设成5μ…...
ChatTTS最新模型实战:从语音合成到生产环境部署的完整指南
最近在做一个智能客服项目,需要集成高质量的语音合成功能,经过一番调研和踩坑,最终选择了ChatTTS的最新模型。整个过程从模型选型、性能优化到最终的生产环境部署,积累了不少实战经验,今天就来和大家完整地分享一下这个…...
WuliArt Qwen-Image Turbo惊艳效果:低光照场景中暗部层次保留与高光不过曝控制
WuliArt Qwen-Image Turbo惊艳效果:低光照场景中暗部层次保留与高光不过曝控制 1. 引言:当AI绘画遇见光影挑战 你有没有遇到过这种情况?想让AI帮你画一张夜晚街头的照片,结果要么整个画面黑乎乎一片,什么细节都看不清…...
LeagueAkari启动异常?4个高效方案彻底解决工具运行故障
LeagueAkari启动异常?4个高效方案彻底解决工具运行故障 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari LeagueA…...
SeqGPT-560M入门指南:Streamlit组件封装——可复用NER输入/输出UI组件
SeqGPT-560M入门指南:Streamlit组件封装——可复用NER输入/输出UI组件 1. 项目简介:一个专为信息抽取而生的智能系统 如果你正在处理海量的非结构化文本,比如从新闻稿里提取人名和公司,从简历里抓取联系方式和职位,或…...
Subnautica Nitrox:在深海孤独中点亮协作的灯塔
Subnautica Nitrox:在深海孤独中点亮协作的灯塔 【免费下载链接】Nitrox An open-source, multiplayer modification for the game Subnautica. 项目地址: https://gitcode.com/gh_mirrors/ni/Nitrox 当450米深的幽暗海水包裹着你的潜水服,周围只…...
