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

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

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

时间: 2024-08-05 03:17:21

进程与线程的区别(整理)的相关文章

程序员面试都会遇到的问题:进程和线程的区别,你该如何回答?

当你刚入职场时,无论你是用C++还是Java甚至只是应聘运维岗位,相信你都会遇到这个问题. 这是一个很基础的问题,但又是一个很考验人水平的问题. 说基础是因为每个学计算机的人都应该懂,进程线程是计算机的基础概念,是每个程序员时时刻刻都要接触的东西. 但这又是一个充满陷阱可以无限扩展和深入的一个问题.比如可以从操作系统知识扩展到计算机组成原理,可以从单线程扩展到并发编程,可以从并发编程深入到线程同步.线程安全.进程间通信等等. 那么我们该如何回答好这个问题呢? 既然要谈区别,那么首先需要理解什么是

进程与线程的区别(转)

线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.4)二者均可并发执行. 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性.进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

进程与线程的区别(总结)

进程与线程的区别,应该是在技术面试出现频率较高的一个问题,今天我做一个总结. 1.教科书式标准回答 进程和线程有很多类似的性质,因此人们习惯上也称线程为轻量级进程(light weight process,lwp),也是cpu调度和分派的基本单元:而传统意义上进程则被称为重量级进程(heavy weight process,hwp),从现代的角度来看,他就是拥有一个线程的进程.如果进程有多个控制线程,那么它就能同时执行多个任务,他们的关系可以简单的由下图表示:

操作系统--进程和线程的区别(转)

http://blog.csdn.net/andy6355/article/details/2506171 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性.进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的

进程与线程的区别

进程是什么? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活动,属于动态概念. 在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行.这是这样的设计,大大提高了CPU的利用率.进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的. 有了进程为什么还要线程? 进程有很多优点,它提供了

进程和线程的区别和联系

学习电脑和编程语言就会遇到进程和线程,初学者往往会在此陷入迷茫和纠结中.其实弄清这两个概念不是很难.从一定意义上讲,进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行. 方法/步骤 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示.   进程是一个“执行中的程序”.程序是一个没有生命

转载:进程和线程的区别

来自于 http://www.cnblogs.com/hazir/archive/2011/05/09/2447287.html,作者讲得不错 进程是什么? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活动,属于动态概念. 在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行.这是这样的设计,大大提高了CPU的利用率.

进程与线程的区别?

进程与线程的区别? 进程是什么? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活动,属于动态概念. 在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行.这是这样的设计,大大提高了CPU的利用率.进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的. 有了进程为什么还要线程? 进程

一道面试题:说说进程和线程的区别

一道面试题:说说进程和线程的区别 在理解进程和线程概念之前首选要对并发有一定的感性认识,如果服务器同一时间内只能服务于一个客户端,其他客户端都再那里傻等的话,可见其性能的低下估计会被客户骂出翔来,因此并发编程应运而生,并发是网络编程中必须考虑的问题.实现并发的方式有多种:比如多进程.多线程.IO多路复用. 多进程 进程是资源(CPU.内存等)分配的基本单位,它是程序执行时的一个实例.程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配C

进程与线程的区别,以及多进程与多线程

什么是线程 什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识.我不能确保能把它讲的话,也不能确保讲的内容全部都正确.即使这样,我也希望尽可能地把他讲通俗一点,讲的明白一点,因为这是个一直困扰我很久的,扑朔迷离的知识领域,希望通过我的理解揭开它一层一层神秘的面纱. 任务调度 线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念.大部分操作系统(如Windows.Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执