如何建设网站导航内链接,重庆网捷网站建设技术有限公司,网站建设调研报告的前言,做网站的都是直男癌吗前言#xff1a;最近操作系统复习到线程的状态模型#xff08;也可以说进程的状态模型#xff0c;本文直接用线程来说#xff09;时候#xff0c;网上查阅资料#xff0c;发现很多文章都说的很不一样#xff0c;有五状态模型、六状态模型、七状态模型.......虽然都是对的… 前言最近操作系统复习到线程的状态模型也可以说进程的状态模型本文直接用线程来说时候网上查阅资料发现很多文章都说的很不一样有五状态模型、六状态模型、七状态模型.......虽然都是对的但是不乏很多刚入门的同学看了会懵因此本文从操作系统的角度讲解线程的“五状态模型”以及后来提出的“七状态模型”还从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角度来解析。大家点个关注谢谢大家了