进程的调度

#进程的状态

在了解进程的调度时我们需要先了解一下进程所拥有的几种状态

1.NEW: 安排了工作, 还未开始行动
2.RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.
3.BLOCKED: 这几个都表示排队等着其他事情
4.WAITING: 这几个都表示排队等着其他事情
5.TIMED_WAITING: 这几个都表示排队等着其他事情
6.TERMINATED: 工作完成了.
其中当我们实例化线程时处于状态1,当我们调用start方法时进程则处于状态2,而当我们调用一些方法使线程休眠或是暂停时其可能处于3,4,5状态,当线程完成时则处于6状态。同时我们可以调用getState方法来查看此时线程的状态。

#进程的属性

1.状态:描述当前这个进程接下应该怎样调度,其中有两个常见状态
就绪状态:随时可以去CPU上执行
2.阻塞状态/睡眠状态:暂时不可以去CPU上执行
优先级:决定谁先谁后的问题
3.记账信息:统计每个进程都分别被执行了多久,分别都执行了哪些指令,分别都排队等了多久,以便为进程调度提供指导依据
4.上下文:表示上次进程被调度处CPU的时候,当时程序的执行状态,下次进程上CPU的时候,就可以回复之前的状态,然后继续往下执行

对于属性1,2我们都不难理解,这里我们主要理解一下4.

我们在调度线程时当然要先创建一个线程,而此时会创建一个PCB(进程控制块)

// 以下代码是 Java 代码的伪码形式,重在说明,无法直接运行
class PCB {
// 进程的唯一标识 —— pid;
// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
// 分配给该资源使用的各个资源
// 进度调度信息
}

此时信息便会存储到PCB当中,我们知道线程的调度在宏观上是同一时刻同时执行的,而实际上线程的调度是随机调用一个而后在随机调用其他线程并不是我们所感觉到的同时调用,我们之所以感觉是同时进行的是因为cpu的速度非常快。既然线程的调用是不断切换的那么我们就有必要记录其上一次执行的信息于是我们就把记账信息与上下文信息存储到PCB中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值