`

线程与进程的优缺点

    博客分类:
  • java
阅读更多
线程与进程的优缺点:
首先,要实现多任务,通常我们会设计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现在又有多进程+多线程的混合模式,真是把问题越搞越复杂。


异步IO

考虑到CPU和IO之间巨大的速度差异,一个任务在执行的过程中大部分时间都在等待IO操作,单进程单线程模型会导致别的任务无法并行执行,因此,我们才需要多进程模型或者多线程模型来支持多任务并发执行。

现代操作系统对IO操作已经做了巨大的改进,最大的特点就是支持异步IO。如果充分利用操作系统提供的异步IO支持,就可以用单进程单线程模型来执行多任务,这种全新的模型称为事件驱动模型,Nginx就是支持异步IO的Web服务器,它在单核CPU上采用单进程模型就可以高效地支持多任务。在多核CPU上,可以运行多个进程(数量与CPU核心数相同),充分利用多核CPU。由于系统总的进程数量十分有限,因此操作系统调度非常高效。用异步IO编程模型来实现多任务是一个主要的趋势。
分享到:
评论

相关推荐

    多线程与多进程的优缺点比较

    描述了操作系统中多线程和多进程的主要优缺点,对于学习操作系统有很好帮助。

    线程和进程的区别PPT

    网络多线程的用法第一节,线程和进程的区别, 以及多线程的优缺点。

    线程与进程

    进线程之间的区别,优缺点,关系等

    用户级线程的介绍,怎样实现多线程等等

    包括线程的介绍,与进程的区别,多线程与单线程,怎样实现多线程。用户级线程的优缺点。

    浅谈Linux进程间通信方式及优缺点

    1)管道 管道分为有名管道和无名管道 ...信号量是一个计数器,可以用来控制多个线程对共享资源的访问.,它不是用于交换大批数据,而用于多线程之间的同步.它常作为一种锁机制,防止某进程在访问资源时其它进程也访

    Linux下的LWP(轻量级进程)、进程、线程、用户级线程、内核线程

    本文主要讲解了Linux下的LWP(轻量级进程)、进程、线程、用户级线程、内核线程的概念、区别与联系、优缺点、发展等相关内容。本文来自于CSDN,由火龙果软件Linda编辑、推荐。再看正文之前我要先强调一下几点:1....

    进程 线程 轻量级线程1

    线程的执行是由系统内核来管理的,通常被称为内核线程或者k-线程。不同于由操作系统内核调度的线程,轻量级线程由应用级线程调度程序来负责调度。轻量级线程也有它的缺点

    linux多线程编程

    线程的缺点 2 四.线程的结构 2 五.线程标识 2 六.线程的创建 3 七..线程的终止 4 八、一次性初始化 8 九、线程的私有数据 9 第二章 线程高级知识 11 一.线程属性 11 二、线程的分离状态 12 三、线程的继承性 13...

    python多线程编程示例(threading.py)

    Unix调度较快),缺点是线程之间的同步和加锁比较麻烦。 2、Python多线程创建 在Python中,同样可以实现多线程,有两个标准模块thread和threading,不过我们主要使用 更高级的threading模块。

    android多线程高效编程

    从Linux基础的线程和进程知识讲起,主要介绍了Android平台上的各种异步机制,并且详细分析了各种线程技术的优缺点。覆盖了技术背后的原理,也展示了技术实现为代码的方法...

    linux系统编程之线程.zip

    线程优、缺点 优点: 1. 提高程序并发性 2. 开销小 3. 数据通信、共享数据方便 缺点: 1. 库函数,不稳定 2. 调试、编写困难、gdb不支持 3. 对信号支持不好 优点相对突出,缺点均不是硬伤。Linux下由于实现方法...

    6种进程防杀方案和源码.rar

    缺点:只能下xp下有效(与xp打的补丁也有关,有的xp系统会失败)防杀能力有限,例如不能防住IceSword等工具 该方法是参考了csdn一位朋友的做法,原文地址为 ...

    JAVA 多线程

    线程也可以达到同一份程序产生好几个进程的效果,但是不同的线程之间可以有某种程度上的资源共享,所以线程又被称为轻量级进程(lightweight process)。  Threads run at the same time, independently of one ...

    Java-学习多线程总结上

    多线程 1. 多线程的基本概念 每一个正在执行的程序都是一个...2. 多线程的优缺点 优点: 1.提高资源利用率 2.提升用户体验 缺点: 1.降低了其它线程的执行概率 2.用户会感到一点的卡顿问题 3.给系统增加了资源压力 4.多

    python 线程

    进程与线程区别7.进程、线程、协程对比8.总结二、 线程1.单线程2.线程常用方法3.多线程4.join():等此线程执行完后,再执行其他线程或主线程5.GIL6.Python多线程的工作过程7.线程锁,互斥锁8.死锁、递归锁三、Event类...

    一个进程池的服务器程序

    总的来说,思想是让子进程accept并处理请求,父进程通过子进程发来的信息控制请求数与子进程数之间的关系。 代码如下: 代码如下: #include #include #include #include #include #include #include #...

    linux系统下多线程编程文档资料

    线程的缺点 2 四.线程的结构 2 五.线程标识 2 六.线程的创建 3 七..线程的终止 4 八、一次性初始化 8 九、线程的私有数据 9 第二章 线程高级知识 11 一.线程属性 11 二、线程的分离状态 12 三、线程的继承性 13...

    简单对比C#程序中的单线程与多线程设计

    而缺点在于线程需要占用内存,线程越多占用的内存就多,多线程需要协调和管理,所以需要占用CPU时间以便跟踪线程,线程之间对共享资源访问会互相影响,所以得解决争用共享资源的问题,线程太多,也会导致控制起来更...

    java并发编程

    第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 [免费观看] 00:09:13分钟 | 第5节线程的状态以及各状态之间的转换详解...

Global site tag (gtag.js) - Google Analytics