美文网首页
多进程与多线程--多进程 or 多线程

多进程与多线程--多进程 or 多线程

作者: Pitfalls | 来源:发表于2016-09-19 11:25 被阅读923次

在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在B/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一个执行线 程),Java的Web容器Tomcat、Websphere等都是多线程的(每客户连接对应一个线程,所有线程都在一个进程中)。

从Unix发展历史看,伴随着Unix的诞生多进程就出现了,而多线程很晚才被系统支持,例如Linux直到内核2.6,才支持符合Posix规范的NPTL线程库。进程和线程的特点,也就是各自的优缺点如下:

进程优点:编程、调试简单,可靠性较高。

进程缺点:创建、销毁、切换速度慢,内存、资源占用大。

线程优点:创建、销毁、切换速度快,内存、资源占用小。

线程缺点:编程、调试复杂,可靠性较差。

上面的对比可以归结为一句话:“线程快而进程可靠性高”。线程有个别名叫“轻量级进程”,在有的书籍资料上介绍线程可以十倍、百倍的效率快于进程; 而进程之间不共享数据,没有锁问题,结构简单,一个进程崩溃不像线程那样影响全局,因此比较可靠。我相信这个观点可以被大部分人所接受,因为和我们所接受的知识概念是相符的。

在写这篇文章前,我也属于这“大部分人”,这两年在用C语言编写的几个C/S通讯程序中,因时间紧总是采用多进程并发技术,而且是比较简单的现场为 每客户fork()一个进程,当时总是担心并发量增大时负荷能否承受,盘算着等时间充裕了将它改为多线程形式,或者改为预先创建进程的形式,直到最近在网 上看到了一篇论文《Linux系统下多线程与多进程性能分析》作者“周丽 焦程波 兰巨龙”,才认真思考这个问题,我自己也做了实验,结论和论文作者的相似,但对大部分人可以说是颠覆性的。

下面是得出结论的实验步骤和过程,结论究竟是怎样的? 感兴趣就一起看看吧。

实验代码使用周丽论文中的代码样例,我做了少量修改,值得注意的是这样的区别:

论文实验和我的实验时间不同,论文所处的年代linux内核是2.4,我的实验linux内核是2.6,2.6使用的线程库是NPTL,2.4使用的是老的Linux线程库(用进程模拟线程的那个LinuxThread)。

论文实验和我用的机器不同,论文描述了使用的环境:单cpu 机器基本配置为:celeron 2.0 GZ, 256M, Linux 9.2,内核 2.4.8。我的环境是:双核 Intel(R) Xeon(R) CPU 5130  @ 2.00GHz(做实验时,禁掉了一核),512MG内存,Red Hat Enterprise Linux ES release 4 (Nahant Update 4),内核2.6.9-42。

进程实验代码(fork.c):

进程实验代码(thread.c):

两段程序做的事情是一样的,都是创建“若干”个进程/线程,每个创建出的进程/线程打印“若干”条“hello linux”字符串到控制台和日志文件,两个“若干”由两个宏 P_NUMBER和COUNT分别定义,程序编译指令如下:

gcc -o fork fork.c

gcc -lpthread -o thread thread.c

实验通过time指令执行两个程序,抄录time输出的挂钟时间(real时间):

time ./fork

time ./thread

每批次的实验通过改动宏 P_NUMBER和COUNT来调整进程/线程数量和打印次数,每批次测试五轮,得到的结果如下:

相关文章

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

  • iOS_进程与线程(多进程与多线程)

    iOS_进程与线程(多进程与多线程)

  • 一个多线程、多进程的脚本

    IO 密集多尽量用多线程,CPU 密集尽量用多进程

  • 作业2

    013-每特教育&蚂蚁课堂-第七期-从零开始学习多线程技术-多线程技术快速入门 什么是多线程 进程与线程的区别 多...

  • 107-基于多线程的ping

    多线程与多进程类似,但是每个线程没有自己的资源空间,它们共用进程的资源。多线程没有僵尸进程的问题。

  • iOS GCD详解

    多线程相关概念 1. 进程与线程 进程: 进程是程序在计算机上的一次执行活动,打开APP就开启了一个进程,它包含多...

  • java多线程-1-并发编程

    并行与并发 并发两个队伍排一个咖啡机单cpu,多线程 并行两个队伍排两个咖啡机多cpu,多线程 进程与线程 进程间...

  • Python多线程,多进程

    以实用为目的,记几个python的多线程,多进程模块 一、多线程 Thread模块 Threading模块 当多线...

  • 多进程和多线程编程

    多任务的实现方式: 多进程模式 多线程模式 多进程 + 多线程 模式python即支持多进程,又支持多线程,如下进...

  • Python time、进程、线程、协程(异步IO)

    Python既支持多进程,又支持多线程 time 多进程 multiprocessing 通常在计算密集型时使用多...

网友评论

      本文标题:多进程与多线程--多进程 or 多线程

      本文链接:https://www.haomeiwen.com/subject/csovdttx.html