进程和线程的区别(c++)

本文详细介绍了进程和线程的区别,包括进程的动态特征、并发性、生命周期,以及线程的意义和线程安全问题。讨论了进程的运行状态、僵尸进程、时间片概念,父子进程创建和Linux下查看进程的方法。线程作为CPU调度的基本单位,其轻量级特性使得线程在资源消耗和切换成本上较进程更低。文章还探讨了多线程同步与互斥的实现方法及其应用场景。
摘要由CSDN通过智能技术生成

进程和线程的区别

进程 process

什么是进程

一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位 进程与程序的差别

  • 进程是一个动态的概念,而程序只是一组指令。
  • 不同的进程可以执行同一个程序
  • 每个进程都有自己的生命周期
  • 进程之间存在并发性
  • 进程间会相互制约 在资源方面或者运行调度方面
  • 进程可以创建子进程,程序不能创建子程序
  • 从结构上讲,每个进程都由程序、数据和一个进程控制块(Process Control Block, PCB)组成

所以进程具有以下特征:

  1. 动态特征:进程对应于程序的运行,动态产生、消亡,在其生命周期中进程也是动态的、
  2. 并发特征:任何进程都可以同其他进程一起向前推进
  3. 独立特征:进程是相对完整的调度单位,可以获得CPU,参与并发执行
  4. 交往特征:一个进程在执行过程中可与其他进程产生直接或间接关系
  5. 异步特征:每个进程都以相对独立、不可预知的速度向前推进
  6. 结构特征:每个进程都有一个PCB作为他的数据结构

进程的运行状态

733013-20170621111849804-2044669562

运行态:进程正在运行,也即是cpu正在它身上。

就绪(等待)态:进程可以运行,已经处于等待队列中,也就是说调度类下次可能会选中它

睡眠(阻塞)态:进程睡眠了,不可运行。

各状态之间的转换方式为:(也许可能不太好理解,可以结合稍后的例子) (1)新状态->就绪态:当等待队列允许接纳新进程时,内核便把新进程移入等待队列。 (2)就绪态->运行态:调度类选中等待队列中的某个进程,该进程进入运行态。 (3)运行态->睡眠态:正在运行的进程因需要等待某事件(如IO等待、信号等待等)的出现而无法执行,进入睡眠态。 (4)睡眠态->就绪态:进程所等待的事件发生了,进程就从睡眠态排入等待队列,等待下次被选中执行。 (5)运行态->就绪态:正在执行的进程因时间片用完而被暂停执行;或者在抢占式调度方式中,高优先级进程强制抢占了正在执行的低优先级进程。 (6)运行态->终止态:一个进程已完成或发生某种特殊事件,进程将变为终止状态。对于命令来说,一般都会返回退出状态码

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值