码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-08-21 09:44:59      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:分支   工作   执行   资源分配   设备   计算资源   环境   时间   操作   

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

本质上:进程和线程都是一个时间段的描述,是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

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

标签:分支   工作   执行   资源分配   设备   计算资源   环境   时间   操作   

原文地址:https://www.cnblogs.com/x-x-736880382/p/11386641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!