Thread -- 01 -- 进程和线程的区别

原文链接:Thread – 01 – 进程和线程的区别


相关文章:


这里我们来了解一下进程和线程的区别,在了解区别之前,我们首先来了解下进程和线程的由来


一、进程和线程的由来

在这里插入图片描述

  • 初期的计算机只能串行执行任务,并且需要长时间等待用户输入,效率十分低下

  • 后来为了提升计算机的执行效率,不用等待用户的输入,对计算机进行了改良:预先将用户的指令集中成清单,然后一次性交给计算机,计算机不断地去读取指令然后进行相应的操作,但仍然无法并发执行

  • 然后在接下来的发展中,批处理操作系统又遇到了问题,当有两个任务 A 和 B,任务 A 在执行到一半的时候,需要读取大量的数据,即所谓的 IO 操作,因此此时 CPU 只能等待任务 A 读取完数据后才能继续执行,这样就白白地浪费了 CPU 资源

    于是人们想,能否在任务 A 读取数据的过程中,让任务 B 去执行;当任务 A 读取完数据之后,再让任务 B 暂停,然后让任务 A 继续执行。但这样就会有一个问题,原来每次只有一个程序在计算机里运行,也就是说内存中始终只有一个程序的运行数据,而想要在任务 A 执行 IO 操作的时候,让任务 B 去抢占 CPU 执行,则内存中必然要装入多个程序,那么又该如何进行处理呢?多个程序使用的数据又该如何进行辨别呢?并且当一个程序运行暂停后,后面又是如何恢复到它之前所执行的状态呢?

    此时进程应运而生,用进程来对应一个程序,每个进程对应一定的内存空间,并且各个进程只能使用自己的内存空间,各个进程之间互不干扰。进程保存了程序每个时候的运行状态,这样就为进程切换提供了可能

    当进程暂停时,它会保存当前进程的状态,例如:进程的标识、进程使用的资源等,在等到 IO 设备完成作业,输出结果后,再重新切换回来时,便可以根据之前保存的状态来进行恢复,然后继续执行,让操作系统的并发成为了可能

    对于单核 CPU 的计算机而言,任何时候只有一个任务在占用 CPU 资源,而单核的情况下让用户看起来像同一时刻并发执行多个任务的原因是:CPU 分配给单一任务执行的时间片很短,而任务切换的频次很高,从而造成了所有任务都并发执行的假象

  • 在出现了进程之后,操作系统的性能得到了大幅度的提升,虽然进程的出现解决了操作系统的并发问题,但是随着电脑的普及,人们开始对计算机的实时性有了要求。一个进程在一段时间内只做一件事情,如果一个进程有多个任务要做,只能逐个地去执行这些子任务,而往往子任务之间不存在顺序上的依赖,是可以并发执行的。既然 CPU 能够按照时间片的方式轮流切换去跑进程,那么能不能给这些子任务打个标签,让 CPU 按照更为细致的时间片去执行子任务呢,答案是肯定的

    由于子任务共享进程的内存资源,因此隶属同一个进程的子任务之间的相互切换,是不需要切换叶目录以使用新的地址空间的,这样就为子任务之间更加快速的切换提供了可能,此时就出现了线程

    让一个线程去执行一个子任务,这样一个进程就包括了多个线程,每个线程负责一个独立的子任务,从而达到提高实时性的效果。因此进程让操作系统的并发成为了可能,而线程让进程内部的并发成为了可能


二、进程和线程的区别

  • 进程

    • 进程是资源分配的最小单位

    • 所有与该进程相关的资源,都被记录在 PCB (进程管理块) 中,以表示该进程拥有这些资源或者正在使用它们

    • 进程是抢占处理机的调度单位,其拥有一个完整的虚拟内存地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一个地址空间

      在这里插入图片描述

  • 线程

    • 线程是 CPU 调度的最小单位,与资源分配无关

    • 线程属于某一个进程,并与进程内的其他线程共享进程的资源

    • 线程只由堆栈寄存器程序计数器TCB (线程控制块) 组成

      • 堆栈寄存器可被用来存储线程中的局部变量,但不能存储其他线程相关的变量

      在这里插入图片描述


三、进程和线程的关系

  • Java 对操作系统提供的功能进行封装,包括进程和线程

  • 每运行一个程序就会产生一个进程,一个进程至少包含一个线程

  • 每个进程对应一个 JVM 实例,多个线程共享 JVM 里的堆

  • Java 程序运行时会自动创建一个主线程

  • 主线程可以创建子线程,原则上要后于子线程完成执行


四、归纳总结

  • 进程是资源分配的最小单位;线程是 CPU 调度的最小单位

  • 线程不能看作独立应用,而进程可以看作独立应用

  • 进程有独立的地址空间,互不影响,而线程只是进程中的不同执行路径

  • 线程没有独立的地址空间,多进程的程序要比多线程的程序健壮

  • 进程的切换比线程的切换开销大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值