Java---进程
Posted 4612
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java---进程相关的知识,希望对你有一定的参考价值。
进程
1、进程和程序的区别
1)
程序(静态):静态硬盘上的一个可执行文件,是永久存在的
进程(动态):程序运行起来后,就是一个进程(由系统管理起来的),是系统分配资源(CPU资源、内存)的最小单位,存在是暂时的
2)程序+数据+PCB(进程控制块,是进程存在的唯一标识)=进程
3)双击打开某个文件(该文件叫做程序),打开这个文件让程序运行起来就是一个进程
补充:
- 进程运行(从程序到进程)
程序加载到内存中在执行(分配内存,带哦都CPU来执行程序代码),最终运行起来就是一个进程 - 对于Java程序的执行
- 进程的PID
PID在操作系统系统里是指进程的识别号,即进程的标识符,操作系统每打开一个程序 都会创建一个进程ID,即PID)。
注意:
它是进程运行时系统分配的,并不代表专门的进程。在运行时PID是不会改变标识符的,但是进程终止后PID标识符就会被系统回收,就可能会被计息分配给新运行的程序
2、时间片轮转调度
1)操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。
2)任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发。
- 进程中的上下文
1)背景
由于并发执行将多个进程时,涉及到时间片轮转调度的切换,所以在切换出去的时候就要保存相关的上下文环境,切换回来的时候要恢复环境,所以提出此概念
2)定义
简单说来,上下文就是一个环境,在切换环境时,某个环境切换出去就是上文,恢复回来就是下文
具体来说,上下文就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容。
3、并发和并行
- 并发:多个进程在一个CPU下,采取时间片轮转调度的方式执行
从cpu的角度看,进程还是一个一个依次执行,但是执行的时间是人肉眼无法感知的,给人的感觉像是在同时执行,所以也叫做假同时
eg:一个窗口(cpu)提供卖票服务,大家需要排队轮流买票(时间片轮转调度) - 并行:多个CPU,在同一个时间点,同时进行多个进程,也称为真同时
4、内核态与用户态
-
前置知识
进程是由系统调度CPU来执行指令的,指令执行是有权限的,操作系统具有最高执行权限,用户程序权限最低,特别突出的就是io操作,程序都没有权限,都需要调度系统函数库(系统开放接口) -
内核态与用户态
cpu真正执行用用户的代码指令,就是用户态
代码指令需要调用系统函数库,就是内核态(其实是用户态转变为内核态)
系统函数调用结束后又切换回用户态
举例:
张三去填表,自己写姓名,电话,邮箱等等,做着自己的事情,这叫做用户态
而张三通过窗口的工作人员,把自己的需求给工作人员,自此,张三在等,银行工作人员在忙,对张三来讲,就叫做陷入内核。那么内核态是什么意思?就是工作人员在帮你办理业务时的状态
-
说明
系统调度cpu执行某个进程代码,也是内核做的事
常见的io操作,也是有内核态的体现
用户态到内核态的切换,属于比较耗费资源的 -
结论
如果代码导致频繁地在用户态和内核态之间切换,性能是非常差的
线程也同样具有以上特征,即线程数量太多,一次轮转,就需要很撑时间才能切换回来,花费在切换上的时间就比较多
频繁的io操作,涉及到用户态和内核态之间的频繁切换,性能差
5、进程的状态转换图
- 就绪态
进程处于可运行的状态,只是CPU时间片还没有轮转到该进程 - 运行态
进程处于可运行的状态,且CPU时间片轮转到该进程,该进程正在执行代码 - 进程创建之后,为什么不能直接进入运行态而要先经过就绪态?
答:进程的状态是由系统调度决定的,而不是由用户程序自身来决定的 - 阻塞态
表现特征:程序暂停等待,满足条件后才能恢复并继续执行
6、CPU基于寄存器中的数据来执行程序代码
以上是关于Java---进程的主要内容,如果未能解决你的问题,请参考以下文章