精华内容
下载资源
问答
  • 2020-10-19 15:44:22

    1. 一句话描述

    进程是资源分配的最小单位,线程是CPU调度的最小单位

     

    2. 举例说明(假设进程=火车,线程=车厢)

    (1)包含关系

    如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线程共同完成的,线程是进程的一部分,所以线程也被称为轻量级进程。

    【一辆火车可以有多个车厢,每节车厢都是火车的一部分】

     

    (2)资源开销

    每个进程都有独立的代码和数据空间,程序之间切换会产生较大的开销;线程可以看作轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小

    【多列火车比多个车厢更耗资源】

    【一辆火车上的乘客很难换到另外一辆火车,比如站点换乘,但是同一辆火车上乘客很容易从A车厢换到B车厢】

     

    (3)内存分配

    同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的

    【一辆火车上不同车厢的人可以共用各节车厢的洗手间,但是不是火车上的乘客无法使用别的火车上的洗手间】

     

    (4)影响关系

    一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程奔溃会导致整个进程都死掉。所以多进程比多线程健壮

    【一列火车上某一节车厢着火,整列火车都受到影响,但是一列火车上着火不会影响另外一辆火车】

     

    (5)执行过程

    每个独立的进程有程序运行的入口,顺序执行序列和程序出口。但是线程不能独立执行,必须存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行

    【火车可以直接发车,车厢单独不能发车】

     

     

    更多相关内容
  • 进程和线程区别,最简单的解释说明

    万次阅读 多人点赞 2019-05-16 14:52:10
    2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段数据段,这种操作非常昂贵。 而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的...

    1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)


    2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
    而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。


    3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。


    4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

     

    根据本人多年从业以及学习经验,录制了一套最新的Java精讲视频教程,如果你现在也在学习Java,在入门学习Java的过程当中缺乏系统的学习教程,你可以加群654631948领取下学习资料,面试题,开发工具等,群里有资深java老师做答疑,每天也会有基础部分及架构的直播课,也可以加我的微信renlliang2013做深入沟通,只要是真心想学习Java的人都欢迎。

    java基础教程:https://ke.qq.com/course/149432?tuin=57912c43


    Java分布式互联网架构/微服务/高性能/springboot/springcloud:

    https://ke.qq.com/course/179440?tuin=57912c43

    展开全文
  • Python中进程和线程区别详解

    千次阅读 2019-03-04 09:30:46
     进程进程时计算机程序一次执行的实例,由 程序段 数据段 PCB组成,是计算机资源分配调度的基本单位,也是线程的容器  线程线程也叫作轻量级进程,是程序执行的最小单位,他本身只拥有少部分执行必须的资源...

    先说一下什么是进程,线程

      进程:进程时计算机程序一次执行的实例,由 程序段 数据段 PCB组成,是计算机资源分配和调度的基本单位,也是线程的容器

      线程:线程也叫作轻量级进程,是程序执行的最小单位,他本身只拥有少部分执行必须的资源。

     进程和线程的VS(创建,通信,稳定性): 

        (1)线程共享内存空间;进程的内存是独立的

        (2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现

        (3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆

        (4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程

        (5)改变主线程(如优先权),可能会影响其它线程;多进程的稳定性好,改变父进程,不影响子进程

     

     

    协程

    协程又叫微线程,简单点说协程是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间,而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态.

    Python里最常见的yield就是协程的思想!

     

    Num01–>线程

    线程是操作系统中能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

    一个线程指的是进程中一个单一顺序的控制流。

    一个进程中可以并发多条线程,每条线程并行执行不同的任务。

    Num02–>进程

    进程就是一个程序在一个数据集上的一次动态执行过程。

    进程有以下三部分组成:

    1,程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成。
    2,数据集:数据集则是程序在执行过程中需要的资源,比如图片、音视频、文件等。
    3,进程控制块:进程控制块是用来记录进程的外部特征,描述进程的执行变化过程,系统可以用它来控制和管理进程,它是系统感知进程存在的唯一标记。

    Num03–>进程和线程的区别:

    1、运行方式不同:

    进程不能单独执行,它只是资源的集合。

    进程要操作CPU,必须要先创建一个线程。

    所有在同一个进程里的线程,是同享同一块进程所占的内存空间。

    2,关系

    进程中第一个线程是主线程,主线程可以创建其他线程;其他线程也可以创建线程;线程之间是平等的。

    进程有父进程和子进程,独立的内存空间,唯一的标识符:pid。

    3,速度

    启动线程比启动进程快。

    运行线程和运行进程速度上是一样的,没有可比性。

    线程共享内存空间,进程的内存是独立的。

    4,创建

    父进程生成子进程,相当于复制一份内存空间,进程之间不能直接访问

    创建新线程很简单,创建新进程需要对父进程进行一次复制。

    一个线程可以控制和操作同级线程里的其他线程,但是进程只能操作子进程。

    5,交互

    同一个进程里的线程之间可以直接访问。

    两个进程想通信必须通过一个中间代理来实现。

    Num04–>几个常见的概念

    1,什么的并发和并行?

    并发:微观上CPU轮流执行,宏观上用户看到同时执行。因为cpu切换任务非常快。

    并行:是指系统真正具有同时处理多个任务(动作)的能力。

    2,同步、异步和轮询的区别?

    同步任务:B一直等着A,等A完成之后,B再执行任务。(打电话案例)

    轮询任务:B没有一直等待A,B过一会来问一下A,过一会问下A

    异步任务:B不需要一直等着A, B先做其他事情,等A完成后A通知B。(发短信案例)

    Num05–>进程和线程的优缺点比较

    首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker。

    如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。

    如果用多线程实现Master-Worker,主线程就是Master,其他线程就是Worker。

    多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程。(当然主进程挂了所有进程就全挂了,但是Master进程只负责分配任务,挂掉的概率低)著名的Apache最早就是采用多进程模式。

    多进程模式的缺点是创建进程的代价大,在Unix/Linux系统下,用fork调用还行,在Windows下创建进程开销巨大。另外,操作系统能同时运行的进程数也是有限的,在内存和CPU的限制下,如果有几千个进程同时运行,操作系统连调度都会成问题。

    多线程模式通常比多进程快一点,但是也快不到哪去,而且,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存。在Windows上,如果一个线程执行的代码出了问题,你经常可以看到这样的提示:“该程序执行了非法操作,即将关闭”,其实往往是某个线程出了问题,但是操作系统会强制结束整个进程。

    在Windows下,多线程的效率比多进程要高,所以微软的IIS服务器默认采用多线程模式。由于多线程存在稳定性的问题,IIS的稳定性就不如Apache。为了缓解这个问题,IIS和Apache现在又有多进程+多线程的混合模式,真是把问题越搞越复杂。

    Num06–>计算密集型任务和IO密集型任务

        是否采用多任务的第二个考虑是任务的类型。我们可以把任务分为计算密集型和IO密集型。

        第一种:计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。

    计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。Python这样的脚本语言运行效率很低,完全不适合计算密集型任务。对于计算密集型任务,最好用C语言编写。

        第二种:任务的类型是IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。

    IO密集型任务执行期间,99%的时间都花在IO上,花在CPU上的时间很少,因此,用运行速度极快的C语言替换用Python这样运行速度极低的脚本语言,完全无法提升运行效率。对于IO密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选,C语言最差。

     

    多进程和多线程:

    因为GIL的问题导致系统中同一时间点只能有一个线程被解释器解释,这就导致了线程无法实现并行,无法充分的利用我们计算机的多核资源,python所谓的多线程编程就类似于单核CPU情况下的多进程编程。

    相比之下多进程下每个进程执行的时候都会创建一个解释器,所以就能够比较好的计算机的多和资源实现并行。

    那么,我们改如何解决GIL锁的问题呢?

      1.更换cpython为jpython(不建议)

      2.使用多进程完成多线程的任务

      3.在使用多线程可以使用c语言去实现

    问题1: 什么时候会释放Gil锁,
      1 遇到像 i/o操作这种 会有时间空闲情况 造成cpu闲置的情况会释放Gil
      2 会有一个专门ticks进行计数 一旦ticks数值达到100 这个时候释放Gil锁 线程之间开始竞争Gil锁(说明:
          ticks这个数值可以进行设置来延长或者缩减获得Gil锁的线程使用cpu的时间)

    问题2: 互斥锁和Gil锁的关系
    Gil锁  : 保证同一时刻只有一个线程能使用到cpu
    互斥锁 : 多线程时,保证修改共享数据时有序的修改,不会产生数据修改混乱

    展开全文
  • 进程和线程区别(操作系统级别解析)

    万次阅读 多人点赞 2018-12-03 16:21:05
    关于进程和线程,大家总是说的一句话是“进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元”。这句话理论上没问题,我们来看看什么是所谓的“资源”呢。   什么是计算机资源 经典的冯诺依曼结构...

    关于进程和线程,大家总是说的一句话是“进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元”。这句话理论上没问题,我们来看看什么是所谓的“资源”呢。

     

    什么是计算机资源

    经典的冯诺依曼结构把计算机系统抽象成 CPU + 存储器 + IO,那么计算机资源无非就两种:

    1. 计算资源
    2. 存储资源

    CPU是计算单元,单纯从CPU的角度来说它是一个黑盒,它只对输入的指令和数据进行计算,然后输出结果,它不负责管理计算哪些“指令和数据”。 换句话说CPU只提供了计算能力,但是不负责分配计算资源。

    计算资源是操作系统来分配的,也就是常说的操作系统的调度模块,由操作系统按照一定的规则来分配什么时候由谁来获得CPU的计算资源,比如分时间片

    存储资源就是内存,磁盘这些存储设备的资源。操作系统使用了虚拟内存机制来管理存储器,从缓存原理的角度来说,把内存作为磁盘的缓存。进程是面向磁盘的,为什么这么说呢,进程表示一个运行的程序,程序的代码段,数据段这些都是存放在磁盘中的,在运行时加载到内存中。所以虚拟内存面向的是磁盘,虚拟页是对磁盘文件的分配,然后被缓存到物理内存的物理页中。

    所以存储资源是操作系统由虚拟内存机制来管理和分配的。进程应该是操作系统分配存储资源的最小单元。

    再来看看线程,理论上说Linux内核是没有线程这个概念的,只有内核调度实体(Kernal Scheduling Entry, KSE)这个概念。Linux的线程本质上是一种轻量级的进程,是通过clone系统调用来创建的。何谓“轻量级”会在后面细说。进程是一种KSE,线程也是一种KSE。所以“线程是操作系统调度的最小单元”这句话没问题。
     

    什么是进程

    进程是对计算机的一种抽象

    1. 进程表示一个逻辑控制流,就是一种计算过程,它造成一个假象,好像这个进程一直在独占CPU资源
    2. 进程拥有一个独立的虚拟内存地址空间,它造成一个假象,好像这个进程一致在独占存储器资源

    下面这张图是进程的虚拟内存地址空间的分配模型图,可以看到进程的虚拟内存地址空间分为用户空间和内核空间。用户空间从低端地址往高端地址发展,内核空间从高端地址往低端地址发展。用户空间存放着这个进程的代码段和数据段,以及运行时的堆和用户栈。堆是从低端地址往高端地址发展,栈是从高端地址往低端地址发展。

    内核空间存放着内核的代码和数据,以及内核为这个进程创建的相关数据结构,比如页表数据结构,task数据结构,area区域数据结构等等。

    从文件IO的角度来说,Linux把一切IO都抽象成了文件,比如普通文件IO,网络IO,统统都是文件,利用open系统调用返回一个整数作为文件描述符file descriptor,进程可以利用file descriptor作为参数在任何系统调用中表示那个打开的文件。内核为进程维护了一个文件描述符表来保持进程所有获得的file descriptor。

    每调用一次open系统调用内核会创建一个打开文件open file的数据结构来表示这个打开的文件,记录了该文件目前读取的位置等信息。打开文件又唯一了一个指针指向文件系统中该文件的inode结构。inode记录了该文件的文件名,路径,访问权限等元数据。

    操作操作系统用了3个数据结构来为每个进程管理它打开的文件资源

     

    fork系统调用

    操作系统利用fork系统调用来创建一个子进程。fork所创建的子进程会复制父进程的虚拟地址空间。

    要理解“复制”和“共享”的区别,复制的意思是会真正在物理内存复制一份内容,会真正消耗新的物理内存。共享的意思是使用指针指向同一个地址,不会真正的消耗物理内存。理解这两个概念的区别很重要,这是进程和线程的根本区别之一。

    那么有人问了如果我父进程占了1G的物理内存,那么fork会再使用1G的物理内存来复制吗,相当于一下用了2G的物理内存? 

    答案是早期的操作系统的确是这么干的,但是这样性能也太差了,所以现代操作系统使用了 写时复制Copy on write的方式来优化fork的性能,fork刚创建的子进程采用了共享的方式,只用指针指向了父进程的物理资源。当子进程真正要对某些物理资源写操作时,才会真正的复制一块物理资源来供子进程使用。这样就极大的优化了fork的性能,并且从逻辑来说子进程的确是拥有了独立的虚拟内存空间。

    fork不只是复制了页表结构,还复制了父进程的文件描述符表,信号控制表,进程信息,寄存器资源等等。它是一个较为深入的复制。

    从逻辑控制流的角度来说,fork创建的子进程开始执行的位置是fork函数返回的位置。这点和线程是不一样的,我们知道Java中的Thread需要写run方法,线程开始后会从run方法开始执行。

    既然我们知道了内核为进程维护了这么多资源,那么当内存进行进程调度时进行的进程上下文切换就容易理解了,一个进程运行要依赖这么些资源,那么进程上下文切换就要把这些资源都保存起来写回到内存中,等下次这个进程被调度时再把这些资源再加载到寄存器和高速缓存硬件。

    进程上下文切换保存的内容有:

    1.页表 -- 对应虚拟内存资源
    2.文件描述符表/打开文件表 -- 对应打开的文件资源
    3.寄存器 -- 对应运行时数据
    4.信号控制信息/进程运行信息

    进程间通信

    虚拟内存机制为进程管理存储资源带来了种种好处,但是它也给进程带来了一些小麻烦,我们知道每个进程拥有独立的虚拟内存地址空间,看到一样的虚拟内地址空间视图,所以对不同的进程来说,一个相同的虚拟地址意味着不同的物理地址。我们知道CPU执行指令时采用了虚拟地址,对应一个特定的变量来说,它对应着一个特定的虚拟地址。这样带来的问题就是两个进程不能通过简单的共享变量的方式来进行进程间通信,也就是说进程不能通过直接共享内存的方式来进行进程间通信,只能采用信号,管道等方式来进行进程间通信。这样的效率肯定比直接共享内存的方式差

    什么是线程

    上面说了一堆内核为进程分配了哪些资源,我们知道进程管理了一堆资源,并且每个进程还拥有独立的虚拟内存地址空间,会真正地拥有独立与父进程之外的物理内存。并且由于进程拥有独立的内存地址空间,导致了进程之间无法利用直接的内存映射进行进程间通信。

    并发的本质是在时间上重叠的多个逻辑流,也就是说同时运行的多个逻辑流。并发编程要解决的一个很重要的问题就是对资源的并发访问的问题,也就是共享资源的问题。而两个进程恰恰很难在逻辑上表示共享资源。

    线程解决的最大问题就是它可以很简单地表示共享资源的问题,这里说的资源指的是存储器资源,资源最后都会加载到物理内存,一个进程的所有线程都是共享这个进程的同一个虚拟地址空间的,也就是说从线程的角度来说,它们看到的物理资源都是一样的,这样就可以通过共享变量的方式来表示共享资源,也就是直接共享内存的方式解决了线程通信的问题。而线程也表示一个独立的逻辑流,这样就完美解决了进程的一个大难题。

    从存储资源的角度理解了线程之后,就不难理解计算资源的分配了。从计算资源的角度来说,对内核而言,进程和线程没有什么区别,所以内核用内核调度实体(KSE)来表示一个调度的单元。

    clone系统调用

    在Linux系统中,线程是使用clone系统调用,clone是一个轻量级的fork,它提供了一系列的参数来表示线程可以共享父类的哪些资源,比如页表,打开文件表等等。我们上面说过了共享和复制的区别,共享只是简单地用指针指向同一个物理地址,不会在父进程之外开辟新的物理内存。

    clone系统调用可以指定创建的线程开始执行代码位置,也就是Java中的Thread类的run方法。

    Linux内核只提供了clone这个系统调用来创建类似线程的轻量级进程的概念。C语言利用了Pthreads库来真正创建了线程这个数据结构。Linux采用了1:1的模型,即C语言的Pthreads库创建的线程实体1:1对应着内核创建的一个KSE。Pthreads运行在用户空间,KSE运行在内核空间。

    既然线程共享了进程的资源,那么线程的上下文切换就好理解了。对操作系统来说,它看到要被调度进来的线程和刚运行的线程是同一个进程的,那么线程的上下文切换只需要保存线程的一些运行时的数据,比如线程的id、寄存器中的值、栈数据。而不需要像进程上下文切换那样要保存页表、文件描述符表、信号控制数据和进程信息等数据。页表是一个很重的资源,我们之前说过,如果采用一级页表的结构,那么32位机器的页表要达到4MB的物理空间。所以线程上下文切换是很轻量级的。

    进程采用父子结构,init进程是最顶端的父进程,其他进程都是从init进程派生出来的。这样就很容易理解进程是如何共享内核的代码和数据的了。

    而线程采用对等结构,即线程没有父子的概念,所有线程都属于同一个线程组,线程组的组号等于第一个线程的线程号。

    我们来看看Java的线程到底是如何实现的。Java语言层面提供了java.lang.Thread这个类来表示Java语言层面的线程,并提供了run方法表示线程运行的逻辑控制流。

    我们知道JVM是C++/C写的,JVM本身利用了Pthreads库来创建操作系统的线程。JVM还要支持Java语言创建的线程的概念。

    JVM提供了JavaThread类来对应Java语言的Thread,即Java语言中创建一个java.lang.Thread对象,JVM会相应的在JVM中创建一个JavaThread对象。同时JVM还创建了一个OSThread类来对应用Pthreads创建的底层操作系统的线程对象。

    构建并发程序可以基于进程也可以线程

    比如Nginx就是基于进程构建并发程序的。而Java天生只支持基于线程的方式来构建并发程序。

     

    总结

    进程VS 线程

    1. 进程采用fork创建,线程采用clone创建
    2. 进程fork创建的子进程的逻辑流位置在fork返回的位置,线程clone创建的KSE的逻辑流位置在clone调用传入的方法位置,比如Java的Thread的run方法位置
    3. 进程拥有独立的虚拟内存地址空间和内核数据结构(页表,打开文件表等),当子进程修改了虚拟页之后,会通过写时拷贝创建真正的物理页。线程共享进程的虚拟地址空间和内核数据结构,共享同样的物理页
    4. 多个进程通信只能采用进程间通信的方式,比如信号,管道,而不能直接采用简单的共享内存方式,原因是每个进程维护独立的虚拟内存空间,所以每个进程的变量采用的虚拟地址是不同的。多个线程通信就很简单,直接采用共享内存的方式,因为不同线程共享一个虚拟内存地址空间,变量寻址采用同一个虚拟内存
    5. 进程上下文切换需要切换页表等重量级资源,线程上下文切换只需要切换寄存器等轻量级数据
    6. 进程的用户栈独享栈空间,线程的用户栈共享虚拟内存中的栈空间,没有进程高效
    7. 一个应用程序可以有多个进程,执行多个程序代码,多个线程只能执行一个程序代码,共享进程的代码段
    8. 进程采用父子结构,线程采用对等结构

     

    附:一篇用现实事务类比来说明进程和线程的文章

    进程与线程的一个简单解释

    展开全文
  • 进程线程区别和联系

    千次阅读 多人点赞 2018-08-08 21:37:00
    程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称之为进程,也就是说进程是系统进行资源分配调度的一个独立单位,每个进程都有自己单独的地址空间。所以说程序与进程...
  • 进程线程、协程管程的区别

    千次阅读 2019-07-25 19:53:54
    操作系统的诞生是为了运行用户程序,事实上程序运行在操作系统上就变成了进程,现在就来让我们一起了解一下进程相关的内容。 进程 根据理解,我们可以对进程下个定义——进程是运行中的程序。注意,进程是一个动态的...
  • 什么是进程? 什么是线程线程和进程之间的区别 进程和线程的选择取决于什么? 计算密集型任务以及I/O密集型任务 在python中,多进程和线程的选择取决于什么
  • Python 基础 之 python 中 进程线程、协程对比 区别和联系 目录 Python 基础 之 python 中 进程线程、协程对比 区别和联系 一、简单介绍 二、进程线程、协程 的定义 1. 进程 2、线程 3、协程 二、...
  • 进程线程区别以及应用场景

    千次阅读 2019-06-24 09:33:35
    线程是系统调度分派的基本单位。 属于同一进程线程,堆是共享的,栈是私有的。 属于同一进程的所有线程都具有相同的地址空间。 多进程的优点: ①编程相对容易;通常不需要考虑锁同步资源的问题。 ②更强的...
  • 程序,进程和线程区别与联系

    千次阅读 2018-05-18 03:01:21
    借鉴了各大网站,总结出的个人心得体会,转载请注明出处提到线程和进程,必须先了解一些预备知识。 程序: 程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的有序集合。 程序(这里前边指的是...
  • 面试题 进程和线程区别

    千次阅读 2019-03-10 00:10:46
    进程 进程是资源(CPU、内存等...Linux系统函数fork()可以在父进程中创建一个子进程,这样的话,在一个进程接到来自客户端新的请求时就可以复制出一个子进程让其来处理,父进程只需负责监控请求的到来,然后创建子...
  • 进程和线程区别(重点)

    千次阅读 2017-08-03 15:03:00
    简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率...
  • 进程和线程区别

    千次阅读 2016-11-22 14:51:37
    相同点: 二者都具有ID,一组寄存器...线程和进程的创建者可以在线程和进程上实行某些控制,比如,创建者可以取消、挂起、继续修改线程和进程的优先级;线程和进程可以改变其属性并创建新的资源; 不同的:
  • 进程线程、协程、goroutine区别

    千次阅读 2019-01-03 02:10:09
    对此,结合一些资料,从操作系统的角度来对进程线程,协程进行介绍,并试着说明协程goruntine是什么。 一、概念理解  1、进程  进程是具有一定独立功能的程序关于某个数据集合上的一...
  • java--进程和线程

    千次阅读 多人点赞 2018-11-25 22:55:49
    进程和线程的概述 在学习线程之前要先知道什么是进程进程就是正在运行的程序,它是系统资源调度的独立单位,并且一个进程可以执行多个任务,而线程就是程序执行的任务,它是程序使用CPU的基本单位,因此也可以说...
  • python 中进程线程、协程的区别

    千次阅读 2018-07-10 00:27:03
    python进程线程、协程 python 线程进程简介   进程线程的历史 我们都知道计算机是由硬件软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机...
  • 进程线程的概念与区别

    千次阅读 2018-09-26 16:18:59
    实施方案: 多进程 多线程进程 优点 : 能并行执行多个任务,提高效率 创建方便,运行独立,不受其他进程影响 数据安全 缺点 : 进程的创建删除都需要消耗计算机的资源 并行: 多个计算机核心在同时处理多个任务...
  • 进程和线程的定义及区别一, 进程的概念进程是在多道程序系统出现以后,为了描述系统内部各作业的活动规律而引进的概念。由 于多道程序系统所带来的复杂环境,程序本身有了并行性【为了充分利用资源,在主存中同时...
  • 1. 进程的概述 ① 进程和线程 进程(Process)是资源分配的基本单位,线程(Thread)是CPU调度的基本...进程和线程的联系: 一个线程只能属于一个进程,一个进程可以拥有多个线程线程之间共享进程资源。 进程和...
  • 线程和进程区别、linux下一些常用的指令
  • 很想写点关于多进程和线程的东西,我确实很爱他们。但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手。 今天终于下了决心,写点东西,以后可以再修修补补也无妨。一.为何需要多进程(或者多...
  • 进程和线程的概念、区别与联系

    千次阅读 2014-11-13 16:03:06
    进程概念  进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的...
  • 进程线程

    万次阅读 多人点赞 2021-03-17 22:50:20
    进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合,程序加入了时间的概念以后,称为进程,具有自己的生命周期各种不同的状态,这些概念都是程序所不具备的. 并发性 多个进程...
  • 进程线程区别与联系

    千次阅读 2016-07-03 23:57:21
    线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.2.关系 一个线程可以创建撤销另一个线
  • 面试必问问题之多进程与多线程区别(超详细)

    千次阅读 多人点赞 2020-06-01 00:05:10
    要想了解什么是多进程和线程,首先要明白为什么会出现进程和线程,下面我会一步步进行说明。 为什么要引入进程 学过操作系统的应该会知道,多道程序设计的特点是多道,宏观上并行,微观上串行,而引入多道批处理...
  • Python基础及进阶内容已陆续更新!欢迎小伙伴们一起关注学习! 本篇文章大家分享Python高阶开发中详细的IO操作...二、让你的代码更加灵活——进程和线程操作 1、进程操作 2、线程操作 (1)线程锁 写在前面 H.
  • 进程线程代码实现,本质区别

    千次阅读 2015-05-21 10:07:54
    线程 or 多进程 (转强力推荐) 在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户...
  • 线程进程、多线程、多进程 多任务 小结

    千次阅读 多人点赞 2019-04-20 11:59:56
    6 线程和进程区别 7 进程的优缺点 7.1 进程的优点 7.2 进程的缺点 8 线程的优缺点 8.1 线程的优点 8.2 线程的缺点 9 多线程的优缺点 9.1 多线程的优点 9.2 多线程的缺点 10多进程的优缺点 10.1 多进程...
  • 进程和线程区别

    万次阅读 2009-02-22 20:37:00
    线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度来看,多线
  • Python开发系列课程(16) - 进程和线程

    千次阅读 2018-03-27 19:10:58
    进程和线程 今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 267,061
精华内容 106,824
关键字:

代码说明进程和线程的区别