共计 1786 个字符,预计需要花费 5 分钟才能阅读完成。
什么是进程
进程的定义是:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。
通俗直白的讲:进程是系统中正在运行的一个程序,程序一旦运行就是进程。
查看进程
在 Windows 系统中,打开 QQ 程序这个软件,系统就会创建一个进程,通过任务栏管理器可以方便直观的查看。如下图所示:
在 Linux 操作系统中,执行 ps -aux 指令,下图所示。
进程特征
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。在 PHP 的 WEB 程序中,用户每次请求都动态产生一个 php-fpm 的进程,结束后又动态消亡。进程的动态性可以通过 top 命令查看。
并发性:任何进程都可以同其他进程一起并发执行。进程与线程样都具有并发性,单核 CPU,进度在处理多任务时,与线程一样也是轮流使用资源。
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。在 Windows 系统中,同时开启多个应用程序,每个应用程序占用的资源各有不同。
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。这好比我们在 Windows 操作系统中既运行浏览器,又能同时运行 QQ 接收到消息,他们之间各自独立互不依赖且互不影响,各个程序又保持着运行状态。
结构特征:进程由程序、数据和进程控制块三部分组成。关于结构特征会比较复杂,放在进度的 PCB 章节中详细介绍。
进程的生命周期
(1) 就绪→执行
处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。
(2) 执行→就绪
处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完或更高优先级的进程抢占而不得不让出处理机,于是进程从执行状态转变成就绪状态。
(3) 执行→阻塞
正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即进程的执行受到阻塞,把这种暂停状态称为阻塞状态。
处于阻塞状态的进程排成一个队列,称为阻塞队列, 有的系统则根据阻塞原因的不同而把处于阻塞状态的进程排成多个队列。
(4) 阻塞→就绪
处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
(5) 运行→终止
程序执行完毕,撤销而终止。
举例说明:
通过 java jar 指令运行 Java 程序,即创建了一个进程,同时进入就绪状态。用户通过 Http 请求访问应用,CPU 调度到这个进程。进程实时返回结果给用户,又进入就绪。若程序处理耗时较长,那进程处于堵塞状态(但 CPU 不堵塞,等时间片到又会调度到另一个进程)。等程序处理完成,又进入就绪状态继续等待用户请求。假设程序在处理的过程中导致程序崩溃,严重情况则有可能终止进程。
以上是最经典也是最基本的三种进程状态(就绪,执行,堵塞),但现在的操作系统都根据需要重新设计了一些新的状态。
运行状态:是运行态和就绪态的合并,表示进程正在运行或准备运行。
可中断睡眠状态(浅度睡眠):进程正在睡眠(被阻塞),等待资源到来是唤醒,也可以通过其他进程信号或时钟中断唤醒,进入运行队列。
不可中断睡眠状态(深度睡眠状态):其和浅度睡眠基本类似,但有一点就是不可被其他进程信号或时钟中断唤醒。
暂停状态:进程暂停执行接受某种处理。如正在接受调试的进程处于这种状态。
僵死状态:进程已经结束但未释放 PCB。
top 指令
在 Linux 系统中,得知进程的状态与其它信息可以使用 top 指令查看输入信息:
PID:进程 ID
USER:进程的所有者
PR:进程的优先级
NI:nice 值,负值表示高优先级,正值表示低优先级
VIRT:进程占用虚拟内存的大小
RES:进程占用物理内存的大小
SHR:进程占用共享内存的大小
S:进程的状态,D= 睡眠状态,R= 运行状态,S= 睡眠状态,T= 停止状态,Z= 僵尸进程
%CPU:进程占用 CPU 的百分比
%MEM:进程占用物理内存的百分比
TIME+:进程占用 CPU 的总时长
COMMAND:进程使用的命令行,使用 top -c 可以查看详细的命令行
最后
为什么要学习进程,因为对处理机即 CPU 的管理可归结为对进程的管理。进一步而言,能控制好进程,那么就能最大化利用 CPU 资源,提高程序运行效率。
搜索并关注微信公众号:iamleiyongjun;每周都有【由浅入深的并发编程】教程分享,开发中间件不再是梦想!