精华内容
下载资源
问答
  • 多进程多线程优缺点

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

    多线程优点:

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

    多线程缺点:

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

    多进程优点:

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

    多线程缺点:

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

    综合

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

    展开全文
  • 多进程多线程的主要区别是:线程是进程的子集(部分),一个进程可能由多个线程组成。多进程的数据是分开的、共享复杂,需要用IPC;但同步简单。多线程共享进程数据,共享简单;但同步复杂。  多进程,Windows...

     

    多进程和多线程的主要区别是:线程是进程的子集(部分),一个进程可能由多个线程组成。多进程的数据是分开的、共享复杂,需要用IPC;但同步简单。多线程共享进程数据,共享简单;但同步复杂。

      多进程,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。

    参考:

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

    展开全文
  • 在Linux下编程多用多进程编程少用多线程编程 IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux...

    一. 在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多进程多线程优缺点

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

    教科书上最经典的一句话是“进程是操作系统分配的最小单位,线程是CPU调度的最小单位”。

    多线程的优点:

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

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

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

    4)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改;

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

    多线程的缺点:

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

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

    3)调度时, 要保存线程状态,频繁调度, 需要占用大量的机时; 程序设计上容易出错(线程同步问题)。

    多进程的优点:

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

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

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

    多进程的缺点:

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

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

    线程和进程各有优势,怎样进行选取呢?

    1)需要频繁创建销毁的优先用线程。
    实例:web服务器。来一个建立一个线程,断了就销毁线程。要是用进程,创建和销毁的代价是很难承受的。

    2)需要进行大量计算的优先使用线程。
    所谓大量计算,当然就是要消耗很多cpu,切换频繁了,这种情况先线程是最合适的。
    实例:图像处理、算法处理

    3)强相关的处理用线程,若相关的处理用进程。
    什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。
    一般的server需要完成如下任务:消息收发和消息处理。消息收发和消息处理就是弱相关的任务,而消息处理里面可能又分为消息解码、业务处理,这两个任务相对来说相关性就要强多了。因此消息收发和消息处理可以分进程设计,消息解码和业务处理可以分线程设计。

    4)可能扩展到多机分布的用进程,多核分布的用线程。

    5)都满足需求的情况下,用你最熟悉、最拿手的方式。

    至于”数据共享、同步“、“编程、调试”、“可靠性”这几个维度的所谓的“复杂、简单”应该怎么取舍,只能说:没有明确的选择方法。一般有一个选择原则:如果多进程和多线程都能够满足要求,那么选择你最熟悉、最拿手的那个。

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

    万次阅读 2013-09-27 18:32:00
    在Linux下编程多用多进程编程少用多线程编程。  IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比...
  • PHP 多进程多线程优缺点

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

    千次阅读 2017-04-19 19:15:00
    多进程使用多进程, 子进程结束以后, 内核会负责回收资源 使用多进程, 子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. 一个常驻主进程, 只负责任务分发, 逻辑更清楚. 多进程方式更加稳定,...
  • 首先我们的问题是,线程是什么? 线程是进程中的一条执行流,是CPU执行调度的基本单位,一个进程中可以有多个线程。在Linux下,线程执行流是通过PCB实现的,且一个进程中可能有多个PCB,这些PCB共享...多线程多进程
  • Linux 多进程多线程优缺点

    千次阅读 2016-03-29 18:08:46
    在Linux下编程多用多进程编程少用多线程编程。  IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比...
  • 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争... 每个进程都有自己的地址空间,即进程空间,在网络或用户换机下,一个服务器通常需要接收大量不确定数量用户的并发请...
  • 多进程在Linux系统下,使用os.fork(), 调用一次,返回两次,操作系统自动把当前进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回。子进程永远返回0,父进程返回子进程的ID。经过这样做,父进程就能...
  • linux多进程多线程优缺点

    千次阅读 2015-08-07 11:54:39
    在Linux下编程多用多进程编程少用多线程编程。  IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比...
  • Java多线程多进程的对比1、多进程(1)多进程的优点(2)多进程缺点2、多线程(1)多线程的优点(2)多线程缺点 1、多进程 当前的操作系统都是多任务OS。每个独立执行的任务就是一个进程。 操作系统OS将时间...
  • Linux环境下多进程多线程优缺点

    千次阅读 2016-04-08 00:39:20
    在Linux下编程多用多进程编程少用多线程编程。  IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比...
  • 线程、进程、多线程多进程 和 多任务 小结

    千次阅读 多人点赞 2019-04-20 11:59:56
    目录 1 进程 2 线程 3 多进程 4 多线程 5 线程与进程的关系 ...9 多线程优缺点 9.1 多线程的优点 9.2 多线程缺点 10多进程优缺点 10.1 多进程的优点 10.2 多进程缺点 8 多任务(多进...
  • Linux内核对多进程多线程的支持方式:  线程机制支持并发程序设计技术,在多处理器上能真正保证并行处理。而在linux实现线程很特别,linux把所有的线程都当作进程实现。linux下线程看起来就像普通进程...
  • 多进程多线程区别

    万次阅读 多人点赞 2016-04-21 10:01:16
    在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一...
  • Python中的多线程多进程优缺点
  • 多线程多进程进行多任务处理的优缺点 我们都知道Linux下的pcb相较于传统的pcb更加轻量化,所以叫做轻量级进程。而且线程是cpu调度的基本单位,进程是资源分配的基本单位。因为cpu调度一个程序的运行是cpu调度的,...
  • 多进程与多线程异同及适用场景举个例子多线程多进程优缺点对比多进程...2.单进程多线程:多个人在同一张桌子上一起吃饭。 3.多进程单线程:多个人每个人在自己的桌子上吃饭。 多线程的问题是多个人同时吃一道菜的...
  • 进程进程是一个正在执行的程序,是向CPU申请资源的,进程之间数据相互独立,一个进程至少...多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任
  • 多进程 VS 多线程

    千次阅读 2015-12-12 22:05:00
    在Linux下编程多用多进程编程少用多线程编程。  IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比...
  • 本文是看了篇文章之后自己的总结 进程线程进程是系统资源分配的最小单位,线程是程序执行的最小单位。进程有自己独立的地址空间,线程没有独立的地址空间。同一进程内的线程共享进程的地址空间。...
  • 多进程优点 ①编程相对容易;通常不需要考虑锁和同步资源的问题。 ②更强的容错性:比起多线程的一个好处是一个进程崩溃了不会影响其他进程。 ③有内核保证的隔离:数据和错误隔离。 对于使用如C/C++这些语言编写的...
  • Python多进程多线程(跑满CPU)

    万次阅读 多人点赞 2019-05-07 15:06:16
    Python多进程多线程(跑满CPU) 概念 任务可以理解为进程(process),如打开一个word就是启动一个word进程。在一个word进程之中不只是进行打字输入,还需要拼写检查、打印等子任务,我们可以把进程中的这些子...
  • 进程线程优缺点

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 148,687
精华内容 59,474
关键字:

多进程、多线程的优缺点