程序、进程、线程的区别和联系

程序与进程:

  • 一个运行中的程序至少有一个进程,一个进程至少有一个线程
  • 程序是一组指令的有序集合,本身并没有任何运行的含义,它只是一个静态的实体;而进程是程序在某个数据集上的运行,进程是一个动态的实体
  • 进程有自己的生命周期:因创建而产生,因调度而运行,因等待资源或事件而处于等待状态,因完成任务而被撤销 。反映了一个程序在一定的数据集上运行的全部动态过程
  • 程序与进程是一对多的关系,程序在不同的数据集上运行就成为不同的进程
  • 进程具有并发性和交往性,而程序具有封闭性

进程与线程:

  • 一个进程至少有一个线程
  • 进程在执行过程中有独立的运行单元,而多个线程共享内存,极大地提高了程序的运行效率
  • 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能独立执行,必须依赖在应用程序中,由应用程序提供多个线程执行控制。多线程的意义在于,一个应用程序中,有多个执行部分可以同时执行
  • 进程是具有一定独立功能的程序在一定数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位
  • 线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位
  • 线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可与同属一个进程的其他线程共享线程所拥有的全部资源
  • 一个进程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行

多任务环境下应用程序进程的主要特点包括:

  • 进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间
  • 进程的生存期状态包括:创建、就绪、运行、阻塞和死亡等类型
  • 从应用程序进程在执行过程中想CPU发出的运行指令形式不同,可将进程的状态分为用户态和核心态。处于用户状态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令
  • unix操作系统下的进程都有唯一进程标识(PID)
  • 进程与线程有一个内存空间的初始入口点、一个程序执行过程中的代码执行序列以及用于标志结束的内存出口点地址。但是进程与线程的重要区别在于线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中,因此可以定义线程是程序内部的具有并发性的顺序代码流

  • 进程和线程都是一个时间段的描述,是CPU工作时间段的描述
  • 程序的运行在CPU这里看起来就是:先加载程序A的上下文,然后开始执行A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存B的上下文。。。
  • 所以进程就是包括上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文
  • 线程是什么呢?

进程的颗粒度太大,每次都要有上下的调入,保存,调出。如果我们把进程比喻为一个运行在电脑上的软件,那么一个软件的执行不可能是一条逻辑执行的,必定有多个分支和多个程序段,就好比要实现程序A,实际分成 a,b,c等多个块组合而成。那么这里具体的执行就可能变成:

程序A得到CPU =》CPU加载上下文,开始执行程序A的a小段,然后执行A的b小段,然后再执行A的c小段,最后CPU保存A的上下文。

这里a,b,c的执行是共享了A的上下文,CPU在执行的时候没有进行上下文切换的。这里的a,b,c就是线程,也就是说线程是共享了进程的上下文环境的更为细小的CPU时间段。

到此全文结束,再一个总结:

进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。


一、进程

进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。

  • 进程一般有三个状态:就绪状态、执行状态、等待状态(或称阻塞状态)进程只能由父进程建立,系统中所有的进程形成一种进程树的层次结构;挂起命令可以由进程自己和其他进程发出,但是解除挂起命令只能由其他进程发出
  • 进程控制块(PCB):PCB不但可以记录进程的属性信息,以便操作系统对进程进行控制和管理,而且PCB标志着进程的存在,操作系统根据系统中是否有该进程的进程控制块PCB而知道该进程存在与否。系统建立进程的同时就建立该进程的PCB,在撤销一个进程时,也就撤销其PCB,故进程的PCB对进程来说是它存在的具体的物理标志和体现。一般PCB包括以下三类信息:进程标识信息;处理器状态信息;进程控制信息。
    由程序段、相关的数据段和PCB三部分构成了进程实体(又称进程印像),一般,我们把进程实体就简称为进程。
  • 进程的特征:
    • 动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的
    • 并发性:任何进程都可以同其他进程一起并发执行
    • 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位
    • 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
二、线程

线程:线程是进程中的一个实体,作为系统调度和分派的基本单位。Linux下的线程看作轻量级进程。

  • 线程的性质:
    • 线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。
    • 由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即进程中至少要有一个或一个以上的线程,否则该进程无法被调度执行。
    • 进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用他们。
    • 线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。
    • 由于共享资源【包括数据和文件】,所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。

多线程使用的情形:前台和后台工作情况;异步处理工作情况;需要加快执行速度情况;组织复杂工作的情况;同时有多个用户服务请求的情况等。

线程机制的优点:
多线程运行在同一个进程的相同的地址空间内,和采用多进程相比有以下优点:

  • 1.创建和撤销线程的开销较之进程要少。创建线程时只需要建立线程控制表相应的表目,或有关队列,而创建进程时,要创建PCB表和初始化,进入有关进程队列,建立它的地址空间和所需资源等。
  • 2.CPU在线程之间开关时的开销远比进程要少得多。因开关线程都在同一地址空间内,只需要修改线程控制表或队列,不涉及地址空间和其他工作。
  • 3.线程机制也增加了通讯的有效性。进程间的通讯往往要求内核的参与,以提供通讯机制和保护机制,而线程间的通讯是在同一进程的地址空间内,共享主存和文件,无需内核参与。
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
进程线程都是操作系统中用于实现多任务的概念。 进程是操作系统中分配资源的基本单位,一个进程可以包含多个线程。每个进程都有独立的内存空间和系统资源(如打开的文件、网络连接等),它们之间的通信需要通过进程间通信(IPC)的方式。进程是由操作系统进行调度和管理的。 线程是进程内的一条执行路径,是程序执行的最小单位。同一个进程中的线程共享进程的资源,如内存空间、打开的文件、网络连接等。线程之间的通信相对容易,可以通过共享内存等方式进行。线程是由操作系统中的线程调度器进行调度和管理的。 总的来说,进程线程的区别主要有以下几点: 1.进程是系统分配资源的基本单位,而线程是进程内的一条执行路径。 2.进程拥有独立的内存空间和系统资源,线程共享进程的资源。 3.进程间通信需要通过进程间通信(IPC)的方式,线程之间的通信相对容易。 4.进程的创建和销毁比较耗费系统资源,线程的创建和销毁相对较少。 5.多个进程之间的调度由操作系统进行管理,同一个进程中的线程由线程调度器进行管理。 联系方面,线程是进程的一部分,一个进程中可以包含多个线程,线程之间的切换比进程之间的切换更轻量级,因此多线程的程序可以更高效地使用系统资源,提高程序的执行效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值