社区
Java SE
帖子详情
线程状态切换的本质,从计算机系统方向分析或者其他底层方向分析
一个阳光努力的程序盐
2019-08-07 11:39:34
线程状态切换的本质,从计算机系统方向分析或者其他底层方向分析
...全文
241
1
打赏
收藏
线程状态切换的本质,从计算机系统方向分析或者其他底层方向分析
线程状态切换的本质,从计算机系统方向分析或者其他底层方向分析
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
northwesternwind
2019-08-07
打赏
举报
回复
线程状态组成:
1 新建(NEW):新创建了一个线程对象。
2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。
3. 运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。
4. 阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。阻塞的情况分三种:
5. 死亡(DEAD):线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。
线程状态切换的本质,主要是因为资源竞争。除了新建和死亡状态之外,线程根据所需要资源的可用情况,在可运行、运行和阻塞状态之间切换。
1. 线程因为等待所需要的资源,或者因为主动sleep而进入阻塞状态,从而释放线程所占用的cpu资源。
2. 当线程sleep时间到,或者所等待的资源可用时,会进入可运行状态。
3. 因为操作系统的调度,线程获得相应的cpu时间片之后,就进入运行状态。
4. 当线程的时间片用完后,再次进入可运行状态。
5. 当线程运行中主动sleep, 或者因为所需要的资源被占用时,进入阻塞状态(同1)
c#多
线程
学习入门经典
C#多
线程
学习(一) 多
线程
的相关概念 什么是进程? 什么是
线程
? 什么是多
线程
? 多
线程
的好处 多
线程
的不利方面
线程
操作的关键对象和语句 任何程序在执行时,至少有一个主
线程
。 Thread类有几个至关重要的方法 C#多
线程
学习(二) 如何操纵一个
线程
Thread.ThreadState 属性
线程
的优先级 C#多
线程
学习(三) 生产者和消费者 While争夺发生,lock语句 Monitor 类锁定一个对象 C#多
线程
学习(四) 多
线程
的自动管理(
线程
池) ThreadPool 的用法 ManualResetEvent对象有几个重要的方法 C#多
线程
学习(五) 多
线程
的自动管理(定时器Timer) C#多
线程
学习(六) 互斥对象Mutex Mutex 类的程序示例
操作系统~复习
线程
状态
转换的过程, 对比租阻塞和挂起的区别, 以及上下文
切换
消耗什么资源
文章目录
线程
的
状态
阻塞与挂起的区别
线程
的阻塞
线程
切换
为何耗资源
线程
的挂起挂起的原因
线程
的
状态
废话不多说先看图 新创建一个新的
线程
对象后,再调用它的start()方法,系统会为此
线程
分配CPU资源,使其处于Runnable(可运行)
状态
,这是一个准备运行的阶段。如果
线程
抢占到CPU资源,此
线程
就处于Running(运行)
状态
。 Runnable
状态
和Running
状态
可相互
切换
,因为有可能
线程
运行一段时间后,有其他高优先级的
线程
抢占了CPU资源,这时此
线程
就从Running
状态
变成Runnable
深入解析操作系统
线程
状态
与Java
线程
状态
的
本质
差异
本文深入解析了操作系统与JVM
线程
生命周期的实现机制。操作系统的
线程
状态
机(就绪、运行、阻塞等)通过内核数据结构(如Linux的task_struct)和调度算法实现精确控制;而JVM
线程
状态
(NEW、RUNNABLE、BLOCKED等)则是对
底层
系统的抽象封装,两者存在约30%的
状态
映射差异。文章通过大量代码示例和图表对比,揭示了
状态
转换的
底层
原理,并提供了死锁检测、性能调优等实战技巧。最后指出,随着虚拟
线程
等新技术发展,理解
线程
状态
机制对构建高并发系统愈发重要。
操作系统 | 进程/
线程
切换
问题
1. 一个芯片上通常会运行多个独立的逻辑流,于是就有了并发。2. 为了解决并发所带来的上下文
切换
问题,所以引入了进程。3. 进程就这样抽象出一个概念,搭配、进程表之类的东西,用来管理独立的程序运行、
切换
。4. 程序的运行涉及大量的计算机资源配置,出于安全性考虑,这些资源的分配,需要陷入内核,
切换
到操作系统,由操作系统来进行资源的配置。5. 由于,置换掉一大堆的
状态
,进程数一高,大部分的系统资源都被进程
切换
吃掉了。
计算机操作系统:
线程
的基本概念
线程
是进程内的一个独立执行单元,是操作系统进行CPU调度的最小单位,多个
线程
共享所属进程的资源空间,同时拥有独立的执行上下文。调度的最小单位:CPU调度不再以进程为单位,而是以
线程
为单位(如时间片分配给
线程
,而非进程),一个进程内的多个
线程
可交替占用CPU;资源共享性:同一进程内的所有
线程
共享进程的核心资源,包括虚拟地址空间(内存)、打开的文件句柄、网络套接字、信号量等,无需额外分配资源;执行独立性。
Java SE
62,628
社区成员
307,259
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章