进程与线程的区别(整理)

整体概念上:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

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

  先说进程:

    背景:

      ①关于计算机系统:CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。

      ②事实1:CPU太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。在多任务执行的时候,CPU总是轮流执行那些任务。

      ③事实2:CPU在执行某个任务的时候,需要先加载这个任务的程序上下文,然后执行,最后再保存该程序上下文(方便下次继续执行该任务的时候加载)。

    综上:进程就是包括上下文切换的程序执行时间总和 = 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时间段。
    个人理解:引入线程,本质上是为了高效使用多核的计算资源。
  
  下面总结一些区别:

    在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

    所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

    内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

    包含关系:进程是线程的容器,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

————————————————

参考资料:
1 进程和线程的主要区别(总结)https://blog.csdn.net/kuangsonghan/article/details/80674777

2 线程和进程的区别是什么? - zhonyong的回答 - 知乎 https://www.zhihu.com/question/25532384/answer/81152571

posted @ 2019-08-21 08:23  xxdeng  阅读(199)  评论(0编辑  收藏  举报