【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
韩楚风 2024-10-01 16:07:04 阅读 99
0102 Linux进程生命周期
专栏内容:
postgresql使用入门基础手写数据库toadb并发编程
个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
文章目录
0102 Linux进程生命周期一、概述 二、进程状态 三、进程的生命周期 3.1 周期阶段 3.2 状态查看
四、总结 结尾
一、概述
在多任务并发编程中,进程是一个非常重要的概念,在应用程序运行时,都是以进程的方式启动,再展开为多进程或多线程的架构。
涉及到系统编程,每个操作系统平台实现存在差异,这里以linux操作系统为例。
在Linux操作系统中,进程是程序的一个实例化(也就是运行起来后),是系统进行资源分配和调度的基本单位。
每个进程是独立的占有资源,会被分配独立的内存空间,CPU核,文件描述符等。
进程之间通过进程间通信(IPC)机制进行通信和同步,当然这里是与线程有区别。
多进程编程就是在同一程序中创建并运行多个进程,以实现并发处理。
本节就来总体介绍一下linux下的进程相关知识,后续会对每个点进行详细介绍。
二、进程状态
在这此状态中有三个基本状态:
就绪,进程的资源准备好了,尚未被分配CPU,此时处在就绪等待的状态;运行,进程被分配了CPU时间片,在分配的CPU核上正在执行时的状态;阻塞,或者睡眠;此时进程需要的资源尚未满足时所处的状态,此时会放弃占用的CPU;
三个状态相互转换:
当就绪的进程被分配到CPU时,就会转换为运行状态;当运行状态的进程CPU时间片用完时,就会转换为就绪状态,等待再次分配CPU;当运行状态的进程中调用sleep或者read/write磁盘文件时,就会进入阻塞状态;当阻塞状态的进程,达到唤醒条件时,比如定时器超时,或者磁盘数据加载到了缓存时,就会转换为就绪状态;
三、进程的生命周期
在进程启动之后,通过一系列状态标识进程当前所处的阶段,直至进程结束。
3.1 周期阶段
对基本状态再进行细化后,整个进程的生命周期状态分为以下几种:
创建:进程被创建,但尚未准备好执行。就绪:进程已准备好执行,但尚未被分配CPU时间。运行:进程正在执行。可中断的阻塞:进程在等待管道,锁等,当收到信号时可以被中断;不可中断的阻塞:进程正在等待IO动作完成,不能被信号中断;终止(Terminated):进程已完成执行或被终止。
3.2 状态查看
前一章节介绍了进程的查看方法,查看实时的活动状态,我们使用<code>top命令;
执行命令之后,进程当前的状态是S
列的值,状态取值有以下几种:
S -- Process Status
The status of the task which can be one of:
D = uninterruptible sleep
I = idle
R = running
S = sleeping
T = stopped by job control signal
t = stopped by debugger during trace
Z = zombie
D,对应于不可中断的阻塞;I,正在处于就绪空闲状态;R,正在运行当中;S,对应于可中断的阻塞;T,被任务控制信号停止t, 当前进程处理调试当前;Z,也就是僵尸进程;
下面我们来看看实际运行的情况,在终端执行top命令:
top - 09:04:55 up 436 days, 58 min, 19 users, load average: 3.65, 3.84, 3.86
Threads: 1512 total, 5 running, 1502 sleeping, 3 stopped, 2 zombie
%Cpu(s): 7.0 us, 13.6 sy, 0.2 ni, 77.3 id, 0.0 wa, 0.1 hi, 1.8 si, 0.0 st
MiB Mem : 31672.7 total, 260.3 free, 12496.5 used, 18915.9 buff/cache
MiB Swap: 1020.0 total, 0.0 free, 1020.0 used. 16843.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1463957 senllang 20 0 2071732 1.2g 1644 R 75.6 3.7 25023:00 ./toadb-0-01 -M 2
1463958 senllang 20 0 2071732 1.2g 1644 R 75.6 3.7 25068:32 ./toadb-0-01 -M 2
1463959 senllang 20 0 2071732 1.2g 1644 S 1.3 3.7 25609:34 ./toadb-0-01 -M 2
3125409 root 20 0 0 0 0 D 1.0 0.0 0:01.80 [kworker/u32:0+flush-8:0]
可以看到有R
,S
,D
几种状态。
当需要关注程序的性能时,如果处理D
时间较长,就需要优化缓存等。
四、总结
本文介绍了linux平台下进程的基本状态,这些状态经过细化后对应进程生命周期中的各阶段;进程从创建启动之后,就处于一个有限状态机中,从就绪,运行,可中断阻塞,不可中断阻塞之间进行转换,直到进程的终止。
结尾
非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!
作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。
注:未经同意,不得转载!
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。