当前位置: 首页 > article >正文

【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化

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 状态查看

前一章节介绍了进程的查看方法,查看实时的活动状态,我们使用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
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!


http://www.kler.cn/a/325698.html

相关文章:

  • Docker 镜像制作原理 做一个自己的docker镜像
  • 计算机视觉与深度学习:使用深度学习训练基于视觉的车辆检测器(MATLAB源码-Faster R-CNN)
  • Openresty 安装
  • 汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮
  • 实现nacos配置修改后无需重启服务--使用@RefreshScope注解
  • 抢十八游戏
  • 【C++——文件操作】
  • Allen Institute for Artificial Intelligence (Ai2) 发布开源多模态语言模型 Molmo
  • Mixture-of-Experts (MoE): 条件计算的诞生与崛起【下篇】
  • 四十四、多云/混合云架构设计(安全与合规策略)
  • watchEffect工作原理
  • docker学习笔记(1.0)
  • 面经4——亚信
  • Visual Studio Code 高级使用技巧:插件推荐、调试技巧与工作流优化
  • 【HTML5】html5开篇基础(5)
  • 怎么屏蔽统计系统统计到的虚假ip
  • 【分布式微服务云原生】探索RPC:远程过程调用的奥秘与技术实现
  • 汽车信息安全 -- 再谈车规MCU的安全启动
  • 【小程序 - 大智慧】Expareser 组件渲染框架
  • CSS学习 - 常用属性
  • python自动更新chromedriver
  • ExpansionPanelList组件的用法
  • 【Android 14源码分析】Activity启动流程-2
  • 大模型使用vLLM推理加速
  • 一篇讲完HTML核心内容
  • 超大规模钢筋计数数据集,共23400组图像,多视角,多角度,多场景,采用voc方式标注 智慧工地资产盘点