进程与线程之间的区别与联系

目录

基础知识介绍

  • CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。
  • CPU太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个任务要执行的时候怎么办呢?轮流着来?或者谁优先级高谁来?不管怎么样的策略,一句话就是在CPU看来就是轮流着来。
  • 执行一段程序代码,实现一个功能的过程介绍,当得到CPU的时候,相关的资源必须也已经就位,就是显卡啊,GPS啊什么的必须就位,然后CPU开始执行。这里除了CPU以外所有的就构成了这个程序的执行环境,也就是我们所定义的程序上下文。当这个程序执行完了,或者分配给他的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的临幸。在被切换出去的最后一步工作就是保存程序上下文,因为这个是下次他被CPU临幸的运行环境,必须保存。
  • 一段程序的执行过程:先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文

进程详解

概念

进程,顾名思义,就是正在进行的程序,是一个动态的过程。或者我们可以简单的把进程理解为程序的代码块儿+程序执行所需数据

计算机中的表示方法

在计算机中,我们使用三部分来描述计算机的进程

  • 程序段:描述进程所要完成的功能,是进程执行时不可修改的部分
  • 数据段:程序执行时所需要的数据和工作区,为一个进程专用,可修改
  • PCB:包含进程的描述信息和控制信息,是进程的动态特性的集中反应

调度状态

不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样的。包括以下三种:

  • 运行态:进程占用CPU,并在CPU上运行;
  • 就绪态:进程已经具备运行条件,但是CPU还没有分配过来;
  • 阻塞态:进程因等待某件事发生而暂时不能运行;

进程在一生中,都处于上述3中状态之一。
这里写图片描述
进程状态之间是如何实现转换的:

  • 运行–>就绪:这是由调度引起的,主要是进程占用CPU的时间过长
  • 就绪–>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
  • 运行–>阻塞:发生了I/O请求或等待某件事的发生
  • 阻塞–>就绪:进程所等待的事件发生,就进入就绪队列
  • 阻塞–>运行:即使给阻塞进程分配CPU,也无法执行,操作系统載进行调度时不会載阻塞队列进行挑选,其调度的选择对象为就绪队列:
  • 就绪–>阻塞:因为就绪态根本就没有执行,何来进入阻塞态?

也就是说,后面的两种转换实际上是不可能发生的。

线程详解

概念

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。

状态转换

  • 新生状态(New):当一个线程的实例被创建即使用new关键字和Thread类或其子类创建一个线程对象后,此时该线程处于新生状态。此时线程不是活着的(not alive);
  • 就绪状态(Runnable):通过调用线程实例的start()方法来启动线程使线程进入就绪状态;但还没有被分配到CPU,处于线程就绪队列;此时线程是活着的(alive);
  • 运行状态(Running):一旦获取CPU,线程就进入运行状态,线程的run()方法才开始被执行;如果在给定的时间内没有执行结束,就会被系统给换下来回到线程的就绪状态;此时线程是活着的(alive);
  • 阻塞状态(Blocked):通过调用join()、sleep()、wait()或者资源被暂用使线程处于阻塞状态; 此时线程是活着的(alive)
  • 死亡状态(Dead):当一个线程的run()方法运行完毕或被中断或被异常退出,该线程到达死亡状态。
    线程状态转换图
    这里写图片描述

进程与其他概念的一些异同

进程和线程都是程序执行的过程,但进程是程序执行从始到终一个完整的执行过程,而线程是只进程中的一个运行流程,一个进程中可以有多个线程。我们来看图解:
这里写图片描述

  • 进程:进程所描述的过程就是这三个部分加起来的总和。
  • 线程:把中间那块儿对A的执行过程再细分,每一个执行流程就是线程。线程本身是没有上下文资源的,但是他可以使用它所属的进程的资源。

特点

1、进程的特点
是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序。
2、线程的特点
线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。

进程与线程之间的联系

1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。
2、资源分配给进程,同一进程的所有线程共享该进程的所有资源。
3、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
4、处理机分给线程,即真正在处理机上运行的是线程。
5、线程是指进程内的一个执行单元,也是进程内的可调度实体。

进程与线程之间的区别

1、调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
2、并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
3、拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。

进程与程序之间的区别

  • 进程是动态的,程序是静态的。程序是有序代码的集合,进程是程序执行的过程。
  • 进程是暂时的,程序是永久的。进程是一个状态变化的过程,程序可永久保存。
  • 进程与程序的对应关系。通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
  • 进程和程序的组成不同。进程的组成包括程序,数据和PCB。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值