进程:一段正在执行的程序
线程:进程内部的一段执行路径 或执行序列
多进程与多线程的区别
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

  1. 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
  2. 线程的划分尺度小于进程,使得多线程程序的并发性高。
  3. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
  4. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  5. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
    应用场景:
    多线程 : 常见的浏览器、Web服务(现在写的web是中间件帮你完成了线程的控制),web处理请求,各种专用服务器(如游戏服务器)
    需要频繁创建销毁的优先用线程
    需要进行大量计算的优先使用线程(CPU频繁切换)
    多进程:使用场所:目标子动能交互少,如果资源和性能许可,可以设计由多个子应用程序来组合完成目的。
    多进程优点:
      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。