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


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

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

  • 相关阅读:
    JSONObject对象和JSONArray对象的使用
    toString和getString的区别
    Pytorch 实验中非常有效的代码段
    TeXworks 高效使用指南
    linux 设置新用户
    ICML-21 待读的 Paper
    2019年12月19日记戴老师的讲座
    matplotlib 调整图片的 font size
    IJCAI 投稿 Type-3 字体
    matplotlib 中 figsize 和 dpi 之间的关系
  • 原文地址:https://www.cnblogs.com/x-x-736880382/p/11386641.html
Copyright © 2020-2023  润新知