精华内容
下载资源
问答
  • 多进程多线程的优缺点分析    多进程和多线程的区别是什么?此前小编给大家介绍了进程和线程的区别,那么大家知道多进程和多线程的区别又是什么吗?它们分别有什么优缺点?为了解决大家的疑惑,小编特地为大家...

    多进程和多线程的区别是什么?多进程和多线程的优缺点分析

     

      多进程和多线程的区别是什么?此前小编给大家介绍了进程和线程的区别,那么大家知道多进程和多线程的区别又是什么吗?它们分别有什么优缺点?为了解决大家的疑惑,小编特地为大家整理了以下教程,希望对大家有所帮助。

     

    多进程和多线程的区别是什么?多进程和多线程的优缺点分析

     

      前言:

      多进程,Windows 应用程序中消息有两种送出途径;直接和排队。Windows或某些运行的应用程序可直接发布消息给窗口过程,或者,消息可送到消息列象连续不断轮询消息队列的OS中当前执行的每个进程都 事件驱动程序不是由事件的顺序来控制,而是由事件的发生来控,而事件的发生是随机的、不确定的,这就允许程序的用户用各种合理的顺序来安排程序的流程。

      多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。[1] 在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。

      一、多进程和多线程的区别是什么?

      在Linux下编程多用多进程编程少用多线程编程。

      IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。

      如果是UNIX/linux环境,采用多线程没必要。

      多线程比多进程性能高?误导!

      应该说,多线程比多进程成本低,但性能更低。

      在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。

      多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。

      多线程是平面交通系统,造价低,但红绿灯太多,老堵车。

      我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。

      高性能交易服务器中间件,如TUXEDO,都是主张多进程的。实际测试表明,TUXEDO性能和并发效率是非常高的。TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义。

      二、多进程和多线程的优缺点分析:

      多进程:

      多进程优点:

      1、每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;

      2、通过增加CPU,就可以容易扩充性能;

      3、可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;

      4、每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。

      多进程缺点:

      1、逻辑控制复杂,需要和主程序交互;

      2、需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大;

      3、最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……

      4、方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

      多线程:

      多线程的优点:

      1、无需跨进程边界;

      2、程序逻辑和控制方式简单;

      3、所有线程可以直接共享内存和变量等;

      4、线程方式消耗的总资源比进程方式好。

      多线程缺点:

      1、每个线程与主程序共用地址空间,受限于2GB地址空间;

      2、线程之间的同步和加锁控制比较麻烦;

      3、一个线程的崩溃可能影响到整个程序的稳定性;

      4、到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;

      5、线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU。

    展开全文
  • 多进程多线程的优缺点

    千次阅读 2015-08-11 13:59:43
    比较多进程多线程的优缺点

    多线程优点:

    无需跨进程边界;
    程序逻辑和控制方式简单;
    所有线程可以直接共享内存和变量;
    线程方式消耗的总资源比进程方式好;

    多线程缺点:

    每个线程与主程序共用地址空间,受限于2GB地址空间;
    线程之间的同步和加锁控制比较麻烦;
    一个线程的崩溃可能影响到整个程序的稳定性;
    到达一定的线程数程度后,即使再增加CPU也无法提高性能;
    线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

    多进程优点:

    每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
    通过增加CPU,就可以容易扩充性能;
    可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
    每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大

    多线程缺点:

    逻辑控制复杂,需要和主程序交互;
    需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
    多进程调度开销比较大;

    综合

    在Linux系统中,当不同的任务需要大量的共享数据或频繁通信时采用多线程,其它情况采用多进程。一个生活上的实例来理解多进程多线程。如需要做饭,首先会将米洗好拿去煮,在煮的过程中人还一边做其它的事情,如洗肉切肉等。人还是一个人,但同时处理多件事情,这大大地提高了效率。使用多进程多线程时,cpu还是需要同样多的时间来完成同样的任务,但多进程多线程能够让cpu穿插地处理各个事件,在某些情况下能够提高了执行效率。
    并不是说所有情况下用多进程多线程都是好事,因为多进程多线程的情况下,CPU还要花时间去维护,CPU处理各进程线程的请求时在进程线程间的切换也要花时间,所以一般情况下是可以不用多进程多线程的,用了有时反而会得不偿失。大多情况下,要用到多进程多线程的主要是需要处理大量的IO操作或处理的情况需要花大量的时间等等,比如:读写文件、视频图像的采集、处理、显示、保存等。

    展开全文
  • 转载--多进程多线程的优缺点 http://www.cnblogs.com/Yogurshine/p/3640206.html 在Linux下编程多用多进程编程少用多线程编程。  IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多...

    转载--多进程和多线程的优缺点 http://www.cnblogs.com/Yogurshine/p/3640206.html

    在Linux下编程多用多进程编程少用多线程编程

             IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。

    如果是UNIX/linux环境,采用多线程没必要。

    多线程比多进程性能高?误导!

    应该说,多线程比多进程成本低,但性能更低

    在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。

    多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。

    多线程是平面交通系统,造价低,但红绿灯太多,老堵车。

    我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。

    高性能交易服务器中间件,如TUXEDO,都是主张多进程的。实际测试表明,TUXEDO性能和并发效率是非常高的。TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义。

     

    ====================================================================================================

    多线程的优点:

    无需跨进程边界; 程序逻辑和控制方式简单; 所有线程可以直接共享内存和变量等; 线程方式消耗的总资源比进程方式好; 多线程缺点:

    每个线程与主程序共用地址空间,受限于2GB地址空间; 线程之间的同步和加锁控制比较麻烦; 一个线程的崩溃可能影响到整个程序的稳定性; 到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数; 线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

     

    多进程优点:

    每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系; 通过增加CPU,就可以容易扩充性能; 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系; 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大 多线程缺点:

    逻辑控制复杂,需要和主程序交互; 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大; 最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……

    方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

     

    ---------------------------------------------------------

    进程的优点:

    1)顺序程序的特点:具有封闭性和可再现性;

    2)程序的并发执行和资源共享。多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率。 进程的缺点:

    操作系统调度切换多个线程要比切换调度进程在速度上快的多。而且进程间内存无法共享,通讯也比较麻烦。

    线程之间由于共享进程内存空间,所以交换数据非常方便;在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。    

     

    线程的优点:

    1)它是一种非常"节俭"的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。当然,在具体的系统上,这个数据可能会有较大的区别;

    2)线程间方便的通信机制,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便;

    3)使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上;

    4)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 线程的缺点: 1.调度时, 要保存线程状态,频繁调度, 需要占用大量的机时; 2.程序设计上容易出错(线程同步问题)。

    展开全文
  • 进程:是并发执行程序在执行过程中分配和管理资源基本单位,是一个动态概念,竞争... 每个进程都有自己地址空间,即进程空间,在网络或用户换机下,一个服务器通常需要接收大量不确定数量用户并发请...

    进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

    线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

    一个程序至少一个进程,一个进程至少一个线程。

    为什么会有线程?

      每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大响应用户请求效率低),因此操作系统中线程概念被引进。

    • 线程的执行过程是线性的,尽管中间会发生中断或者暂停,但是进程所拥有的资源只为改线状执行过程服务,一旦发生线程切换,这些资源需要被保护起来。
    • 进程分为单线程进程和多线程进程,单线程进程宏观来看也是线性执行过程,微观上只有单一的执行过程。多线程进程宏观是线性的,微观上多个执行操作。

    线程的改变只代表CPU的执行过程的改变,而没有发生进程所拥有的资源的变化。 

    进程线程的区别:

    • 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
    • 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。

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

         进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程

    • 执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
    • 线程是处理器调度的基本单位,但是进程不是。
    • 两者均可并发执行。

    优缺点:

      线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。

      进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器前移。

    何时使用多进程,何时使用多线程?

    对资源的管理和保护要求高,不限制开销和效率时,使用多进程。

    要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。

    一. 在Linux下编程多用多进程编程少用多线程编程

    IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。

    如果是UNIX/linux环境,采用多线程没必要。多线程比多进程性能高?误导!应该说,多线程比多进程成本低,但性能更低。在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。

    多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。多线程是平面交通系统,造价低,但红绿灯太多,老堵车。就比如我们都开跑车,油(主频)不是问题,也不怕上坡下坡,但就怕堵车。

    高性能交易服务器中间件,如TUXEDO,都是主张多进程的。实际测试表明,TUXEDO性能和并发效率是非常高的。TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义。


    二. 进程

    1. 进程的优点

    • 顺序程序的特点:具有封闭性和可再现性;
    • 程序的并发执行和资源共享。多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率。

    2. 进程的缺点

    • 操作系统调度切换多个线程要比切换调度进程在速度上快的多。而且进程间内存无法共享,通讯也比较麻烦。
    • 线程之间由于共享进程内存空间,所以交换数据非常方便;在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

    三. 线程

    1. 线程的优点

    • 它是一种非常”节俭”的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。当然,在具体的系统上,这个数据可能会有较大的区别;

    • 线程间方便的通信机制,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便;

    • 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上;

    2. 线程的缺点

    • 调度时, 要保存线程状态,频繁调度, 需要占用大量的机时;

    • 程序设计上容易出错(线程同步问题)。


    四. 多进程

    1. 多进程优点

    • 每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
    • 通过增加CPU,就可以容易扩充性能;
    • 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
    • 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大

    2. 多进程缺点

    • 逻辑控制复杂,需要和主程序交互;
    • 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
    • 多进程调度开销比较大;

    五. 多线程

    1. 多线程的优点

    • 无需跨进程边界;
    • 程序逻辑和控制方式简单;
    • 所有线程可以直接共享内存和变量等;
    • 线程方式消耗的总资源比进程方式好;

    2. 多线程缺点

    • 每个线程与主程序共用地址空间,受限于2GB地址空间;
    • 线程之间的同步和加锁控制比较麻烦;
    • 一个线程的崩溃可能影响到整个程序的稳定性;
    • 到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;
    • 线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

    在开发中,最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题。方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

    展开全文
  • 多进程 使用多进程, 子进程结束以后, 内核会负责回收资源 使用多进程, 子进程异常...共享内存,这种方式和线程间读写变量是一样,需要加锁,会有同步、死锁问题。 消息队列,可以采用多个子进程抢队列模式,性...
  • 在Linux下编程多用多进程编程少用多线程编程 IBM有个家伙做了个测试,发现切换线程context时候,windows比linux快一倍多。进出最快锁(windows2k critical section和linuxpthread_mutex),windows比linux...
  • 多进程多线程最大不同在于: 在多进程中,同一变量拷贝存在于每一个进程,互不影响 在多线程中,所有变量都是由所有线程共享,所有线程都有权限去修改任何一个变量,所以需要引入Lock。 当多个线程在同时执行...
  • Linux多进程多线程的优缺点

    千次阅读 2017-09-15 17:54:05
    多线程的优点:1)它是一种非常”节俭”的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。而...
  • php 多进程多线程的优缺点

    千次阅读 2017-04-19 19:15:00
    多进程使用多进程, 子进程结束以后, 内核会负责回收资源 使用多进程, 子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. 一个常驻主进程, 只负责任务分发, 逻辑更清楚. 多进程方式更加稳定,...
  • Linux 多进程多线程的优缺点

    千次阅读 2016-03-29 18:08:46
    在Linux下编程多用多进程编程少用多线程编程。  IBM有个家伙做了个测试,发现切换线程context时候,windows比linux快一倍多。进出最快锁(windows2k critical section和linuxpthread_mutex),windows比...
  • 创建多进程的系统花销远大于创建多线程。 4. 通讯: 多进程通讯因为需要跨越进程边界,不适合大量数据传送,更适合小数据或者密集数据传送。 多线程共享同一进程里共享内存和变量。无需跨越进程边界,适合各...
  • linux多进程多线程的优缺点

    千次阅读 2015-08-07 11:54:39
    在Linux下编程多用多进程编程少用多线程编程。  IBM有个家伙做了个测试,发现切换线程context时候,windows比linux快一倍多。进出最快锁(windows2k critical section和linuxpthread_mutex),windows比...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 862
精华内容 344
关键字:

多进程多线程的优缺点