`

浅谈多进程多线程的选择【转】

阅读更多

转自http://myeducs.cn/lunwen-resource/Net-biancheng/qiantanduojinchengduoxianchengdexuanze/

关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。

经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更加合适就是哪个好。
我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为是感性的比较,因此都是相对的,不是说一个好得不得了,另外一个差的无法忍受)。

【点击查看原图】看起来比较简单,优势对比上是“线程 3.5 v 2.5 进程”,我们只管选线程就是了?

呵呵,有这么简单我就不用在这里浪费口舌了,还是那句话,没有绝对的好与坏,只有哪个更加合适的问题。我们来看实际应用中究竟如何判断更加合适。

1)需要频繁创建销毁的优先用线程

原因请看上面的对比。
这种原则最常见的应用就是Web服务器了,来一个连接建立一个线程,断了就销毁线程,要是用进程,创建和销毁的代价是很难承受的

2)需要进行大量计算的优先使用线程

所谓大量计算,当然就是要耗费很多CPU,切换频繁了,这种情况下线程是最合适的。
这种原则最常见的是图像处理、算法处理。

3)强相关的处理用线程,弱相关的处理用进程

什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。
一般的Server需要完成如下任务:消息收发、消息处理。“消息收发”和“消息处理”就是弱相关的任务,而“消息处理”里面可能又分为“消息解码”、“业务处理”,这两个任务相对来说相关性就要强多了。因此“消息收发”和“消息处理”可以分进程设计,“消息解码”、“业务处理”可以分线程设计。
当然这种划分方式不是一成不变的,也可以根据实际情况进行调整。

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

原因请看上面对比。

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

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

需要提醒的是:虽然我给了这么多的选择原则,但实际应用中基本上都是“进程+线程”的结合方式,千万不要真的陷入一种非此即彼的误区。

分享到:
评论

相关推荐

    浅谈JAVA语言的多线程技术.pdf

    浅谈JAVA语言的多线程技术 一、多线程技术的概述 JAVA语言作为一种面向对象的编程语言,它具有平台独立性、安全性、网络化、多线程、面向对象等特点。其线程机制在实践中广泛应用而受到编程者的极大关心。本文就...

    浅谈Linux下的多线程编程.pdf

    在Linux操作系统中,多线程编程是一种常见且重要的编程模型,它允许多个执行流(线程)在一个进程中同时运行,以提高程序的并发性和资源利用率。多线程在系统开发中扮演着关键角色,特别是在需要高性能计算、实时...

    浅谈Java的多线程机制.pdf

    "浅谈Java的多线程机制" 本文主要讨论了Java语言中的多线程机制,旨在提高应用程序的性能和实时控制性能。 Java提供了多线程编程模型,使得在一个程序中可以同时执行多个小任务,从而最大限度地利用CPU资源。 首先...

    浅谈Java多线程编程.pdf

    "浅谈Java多线程编程" 从标题和描述可以看出,这篇文章的主题是讨论Java多线程编程的相关知识点。 多线程编程的概念 Java语言的一个重要特点是支持多线程机制,这使得Java程序可以支持多程序并发执行,从而提高...

    浅谈多线程_让程序更高效的运行

    在Java中,多线程是通过创建并运行多个线程来实现的,每个线程代表着进程中的一条独立控制流。Java线程是抢占式的,意味着线程的执行是由操作系统调度,根据优先级和当前状态决定。 【进程】是一个程序或应用的实例...

    浅谈.NET下的多线程和并行计算.pdf

    ### .NET下的多线程与并行计算:深入解析与应用 #### 一、引言 随着计算机硬件的发展,特别是多核处理器的普及,多线程和并行计算已成为现代软件开发不可或缺的一部分。本文旨在探讨.NET框架下多线程与并行计算的...

    浅谈进程与线程计算机操作系统.pdf

    进程和线程是计算机操作系统中两个重要的概念,它们在多任务环境下的运行和资源管理中起着关键作用。 首先,让我们深入理解进程。进程可以被看作是程序在多任务操作系统中的实例化,是一个程序在特定数据集上的执行...

    浅谈linux模拟多线程崩溃和多进程崩溃

    在Linux操作系统中,多线程和多进程是实现并发执行任务的两种常见方式。然而,当程序中出现错误导致崩溃时,这两种方式的行为有所不同。本文将探讨如何模拟多线程和多进程的崩溃,并分析它们的影响。 首先,我们来...

    浅谈linux多线程编程和windows多线程编程的异同.doc

    首先,多线程编程的核心在于实现并发执行,通过创建多个线程,使得程序的不同部分可以在同一进程中并行工作。然而,Linux和Windows在实现多线程时,其API和底层机制有所不同。 在Linux中,多线程编程主要依赖于...

    浅谈计算机操作系统中线程与超线程技术及应用.pdf

    Java的线程模型基于操作系统线程,Python则在早期版本中使用了全局解释器锁(GIL),限制了多线程在CPU密集型任务中的并行性,但在多线程I/O操作上仍能发挥优势。Python的后期版本和一些库如Jython、PyPy等,通过...

    浅谈.doclinux.doc多线程编程和.docwindows.doc多线程编程的异同.doc

    多线程编程是一种在单个进程中同时执行多个并发任务的技术,它可以提高程序的效率和响应性,尤其是在处理大型计算任务或需要并行处理的场景中。本文将对比Linux和Windows平台上的多线程编程,探讨它们的异同点。 ...

    浅谈Linux操作系统下的多线程编程.pdf

    在Linux操作系统中,多线程编程是一种高效的任务执行方式,特别是在现代计算机系统中,多核处理器的普及使得并发执行成为提升性能的关键。多线程技术早在60年代就被提出,并在Linux等操作系统中得到广泛支持。它有两...

    浅谈 Node和php的进程管理

    PHP-FPM是PHP针对FastCGI协议的一个具体实现,它采用了多进程同步模型,一个请求对应一个进程线程。这种设计虽然保证了服务的稳定性和可靠性,但其IO同步阻塞的特性使得无法像Node.js那样由单一进程处理高并发请求。...

    浅谈线程课程设计论文(操作系统).pdf

    多线程是指在一个进程中同时运行多个线程,以实现并发处理多项任务,提高系统效率。线程的特点包括: 1)轻量级实体:线程占用的系统资源少,启动和切换速度快,使得线程间的切换相比进程更加高效。 2)独立调度...

Global site tag (gtag.js) - Google Analytics