用蛋炒饭告诉你进程与线程究竟是个什么鬼东西,到底有什么区别?

进程与线程是什么,它们之间又有peach区别

先来整点学术类的好活,在准备说句人话

1. 进程与线程的概念(进程是各种资源的集合,线程则是在CPU上被调度执行的实体)

吐槽一下:其实我在看《现代操作系统》这本书里面没有特别明确提出进程与线程的概念或者是定义,反而《深入理解计算系统》(这本书是讲计算机组成原理和计算机体系结构的,我好多同学都弄混了)描述的比较清晰一点。

  1. 进程(process):在构造应用级别的并发程序中,每个逻辑控制流都是一个进程,进程同时也是一个容纳了运行一个程序所需要所有信息的容器,由内核来调度和维护,与每个进程相关的是地址空间。它是操作系统调配资源的最小单位。与单纯的程序不一样,他多了一些什么地址空间啊、程序计数器等乱七八糟的东西,下面会比较详细一点。
  2. 线程(thread):线程就是运行在进程上下文中的逻辑控制流,是进程内部执行的一个分支,由内核进行调度。它是任务调动和执行的基本单位。每个线程都有它自己的线程上下文,包括一个唯一的整数线程ID(Thread ID,TID)、栈、栈指针、程序计数器、通用目的寄存器和条件码。所有的运行在一个进程里的线程共享该进程的整个虚拟地址空间。

这两段里面反复提及的内核是个很复杂的概念,内核不太准确的说法:内核也是一段程序,不过很底层,底层到电路的那种。CSDN博主小虾米_2018的《浅析操作系统与操作系统内核》,网址:https://blog.csdn.net/qq_22847457/article/details/89203593

2. 进程与线程的关系

在这里插入图片描述

3. 进程、程序、线程的区别(用蛋炒饭做比方)

程序告诉你怎么炒,进程就是整个炒的过程,线程就是炒的时候换大小火,程序计数器地址空间就是蛋。

在这里插入图片描述

3.1 来开始炒饭

加油加蛋加酱油,然后颠勺换火的一整个过程叫进程。

  1. 第一步(这种纯文字描述就是程序,具体运作进程):将火腿切片、胡萝卜切丁,葱切末,鸡蛋打散。
    葱花、鸡蛋、火腿丁、胡萝卜丁就是程序计数器、寄存器之类乱七八糟的的东西,地址空间应该算是装饭的碗
    在这里插入图片描述
  2. 第二步(程序):锅内热油,蛋液倒入锅中后快炒,炒均后收干出锅(这种很细微的操作就属于线程)。
    在这里插入图片描述
  3. 第三步:锅内热油,放葱末爆香,然后加入火腿片、萝卜丁,快速煸炒5分钟后倒入米饭,炒散均匀。(细节操作属于线程)
    在这里插入图片描述
  4. 第四步:饭炒均匀后加入鸡蛋,再加入酱油调味,翻炒均匀后即可出锅。(我觉得还是点个外卖比较香,顺手再来一杯欢乐水)
    在这里插入图片描述

3.2 开饭了,记得顺手给自己来一杯卡布奇诺(lbwnb)

4. 进程与线程在消耗资源方面的区别

  1. 进程切换与线程切换的开销:每个进程都有独立的逻辑控制流、地址空间和程序运行所需要的信息,因此程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享地址空间,每个线程都有自己相对于其他线程独立的运行栈和程序计数器,因此线程之间切换的开销小。
  2. 所处环境:在操作系统中能同时运行多个进程,而在同一个进程中也可以有多个线程同时执行。
  3. 内存分配:系统在运行的时候会为每个进程分配不同的地址空间;而对线程而言,除了CPU外,系统不会为线程分配内存,线程组之间只能共享进程所有的地址空间。

5. 为什么有了进程还要选择线程

  1. 由于线程比进程更加轻量级,所以它们比进程更容易(即更快)建立,也更容易撤销。在许多系统中,创建了一个线程比较创建一个进程要快10-100倍。在有大量线程需要动态和快速修改的时候,这一点十分重要。
  2. 通过将这些应用程序分解成可以准并行运行的多个顺序线程,使得程序设计模型相对而言比较简单一些。
  3. 若多个线程都是CPU密集型的,那么并不能获得性上的增加,但是如果存在着大量的计算和大量的I/O处理,拥有多个线程允许这些活动彼此重叠进行,而会加快应用程序的执行速度。
  4. 在多CPU系统中,多线程是有益的,在这样的系统中,真正的并行有了实现的可能。

6. 参考资料

  1. CSDN博主kingdoooom的《进程和线程的主要区别(总结)》,网址:https://blog.csdn.net/kuangsonghan/article/details/80674777?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

  2. CSDN博主小虾米_2018的《浅析操作系统与操作系统内核》,网址:https://blog.csdn.net/qq_22847457/article/details/89203593

  3. 简调视频:蛋炒饭的做法 (这个属于随手一搜)

  4. 深入理解计算机系统(原书第三版)P682-768(第十二章节:并发编程)

  5. 现代操作系统(原书第四版)P48-P102(第二章:进程与线程),P22(操作系统的概念1.5.1进程)

在这里插入图片描述

发布了8 篇原创文章 · 获赞 22 · 访问量 1782

猜你喜欢

转载自blog.csdn.net/qq_45877524/article/details/105207479