【linux 多历程并发】linux历程状态与生命周期各阶段转换,历程状态查看分 ...

打印 上一主题 下一主题

主题 804|帖子 804|积分 2412

0102 Linux历程生命周期

   ​专栏内容
  

  • postgresql使用入门底子
  • 手写数据库toadb
  • 并发编程
    个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
  
  
一、概述


在多任务并发编程中,历程是一个非常重要的概念,在应用程序运行时,都是以历程的方式启动,再睁开为多历程或多线程的架构。
涉及到体系编程,每个操作体系平台实现存在差异,这里以linux操作体系为例。
在Linux操作体系中,历程是程序的一个实例化(也就是运行起来后),是体系进行资源分配和调理的根本单元。
每个历程是独立的占有资源,会被分配独立的内存空间,CPU核,文件描述符等。
历程之间通过历程间通信(IPC)机制进行通信和同步,当然这里是与线程有区别。
多历程编程就是在同一程序中创建并运行多个历程,以实现并发处理。
本节就来总体介绍一下linux下的历程相关知识,后续会对每个点进行详细介绍。

二、历程状态



在这此状态中有三个根本状态:


  • 就绪,历程的资源预备好了,尚未被分配CPU,此时处在就绪等候的状态;
  • 运行,历程被分配了CPU时间片,在分配的CPU核上正在实行时的状态;
  • 阻塞,大概睡眠;此时历程必要的资源尚未满足时所处的状态,此时会放弃占用的CPU;
三个状态相互转换:


  • 当就绪的历程被分配到CPU时,就会转换为运行状态;
  • 当运行状态的历程CPU时间片用完时,就会转换为就绪状态,等候再次分配CPU;
  • 当运行状态的历程中调用sleep大概read/write磁盘文件时,就会进入阻塞状态;
  • 当阻塞状态的历程,达到唤醒条件时,好比定时器超时,大概磁盘数据加载到了缓存时,就会转换为就绪状态;
三、历程的生命周期


在历程启动之后,通过一系列状态标识历程当前所处的阶段,直至历程竣事。
3.1 周期阶段


对根本状态再进行细化后,整个历程的生命周期状态分为以下几种:


  • 创建:历程被创建,但尚未预备好实行。
  • 就绪:历程已预备好实行,但尚未被分配CPU时间。
  • 运行:历程正在实行。
  • 可停止的阻塞:历程在等候管道,锁等,当收到信号时可以被停止;
  • 不可停止的阻塞:历程正在等候IO动作完成,不能被信号停止;
  • 制止(Terminated):历程已完成实行或被制止。
3.2 状态查看

前一章节介绍了历程的查看方法,查看实时的运动状态,我们使用top下令;
实行下令之后,历程当前的状态是S列的值,状态取值有以下几种:
  1. S  --  Process Status
  2. The status of the task which can be one of:
  3.    D = uninterruptible sleep
  4.    I = idle
  5.    R = running
  6.    S = sleeping
  7.    T = stopped by job control signal
  8.    t = stopped by debugger during trace
  9.    Z = zombie
复制代码


  • D,对应于不可停止的阻塞;
  • I,正在处于就绪空闲状态;
  • R,正在运行当中;
  • S,对应于可停止的阻塞;
  • T,被任务控制信号制止
  • t, 当进步程处理调试当前;
  • Z,也就是僵尸历程;
下面我们来看看实际运行的情况,在终端实行top下令:
  1. top - 09:04:55 up 436 days, 58 min, 19 users,  load average: 3.65, 3.84, 3.86
  2. Threads: 1512 total,   5 running, 1502 sleeping,   3 stopped,   2 zombie
  3. %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
  4. MiB Mem :  31672.7 total,    260.3 free,  12496.5 used,  18915.9 buff/cache
  5. MiB Swap:   1020.0 total,      0.0 free,   1020.0 used.  16843.8 avail Mem
  6.     PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  7. 1463957 senllang  20   0 2071732   1.2g   1644 R  75.6   3.7  25023:00 ./toadb-0-01 -M 2
  8. 1463958 senllang  20   0 2071732   1.2g   1644 R  75.6   3.7  25068:32 ./toadb-0-01 -M 2
  9. 1463959 senllang  20   0 2071732   1.2g   1644 S   1.3   3.7  25609:34 ./toadb-0-01 -M 2
  10. 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
如有错误大概疏漏欢迎指出,相互学习。
注:未经同意,不得转载!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表