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

经常在网络上看到有XDJM问“多进程好还是多线程好?”、"Linux下用多进程还是多线程?"等等期望一劳永逸的问题,只能说:没有最好,只有更好,根据实际情况来判断,哪个更加合适就是哪个好。

我们按照多个不同的维度,来看看多进程和多线程的对比(注:因为是感性的比较,因此都是相对的,不是说一个好得不得了,另一个差的无法忍受)

维度

多进程

多线程

总结

数据共享、同步

数据是分开的:共享复杂,需要用IPC;同步简单

多线程共享进程数据:共享简单;同步复杂

各有优势

内存、CPU

占用内存多,切换复杂,CPU利用率低

占用内存少,切换简单,CPU利用率高

线程占优

创建销毁、切换

创建销毁、切换复杂,速度慢

创建销毁、切换简单,速度快

线程占优

编程调试

编程简单,调试简单

编程复杂,调试复杂

进程占优

可靠性

进程间不会相互影响

一个线程挂掉将导致整个进程挂掉

进程占优

分布式

适应于多核、多机分布 ;如果一台机器不够,扩展到多台机器比较简单

适应于多核分布

进程占优

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

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

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

所谓大量计算,当然就是要消耗很多cpu,切换频繁了,这种情况先线程是最合适的。

实例:图像处理、算法处理

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

什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。

一般的server需要完成如下任务:消息收发和消息处理。消息收发和消息处理就是弱相关的任务,而消息处理里面可能又分为消息解码、业务处理,这两个任务相对来说相关性就要强多了。因此消息收发和消息处理可以分进程设计,消息解码和业务处理可以分线程设计。

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

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

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

转载:http://www.embeddedlinux.org.cn/html/xianchengjincheng/201201/26-1957.html

linux 多线程 多进程 利用率,多进程与多线程的深度比较相关推荐

  1. linux的多任务 多进程,浅谈linux模拟多线程崩溃和多进程崩溃

    结论是: 多线程下如果其中一个线程崩溃了会导致其他线程(整个进程)都崩溃: 多进程下如果其中一个进程崩溃了对其余进程没有影响: 多线程 #include #include #include #incl ...

  2. 第4章 Linux网络编程 22.多进程实现并发服务器、多线程实现并发服务器

    目录 多线程实现并发服务器 多进程实现并发服务器 多线程实现并发服务器 server_thread.c #include <stdio.h> #include <arpa/inet. ...

  3. python多线程_干货|理解python多线程和多进程

    点击上方"AI遇见机器学习",选择"星标"公众号 原创干货,第一时间送达 一.多线程与多进程 在介绍Python多线程编程之前,先给大家复习一下进程和线程的概念 ...

  4. 并发编程含义比较广泛,包含多线程编程、多进程编程及分布式程序等 目录 1. “共享内存系统”,消息传递系统”。 1 1.1. 共享模式 多进程 多线程 1 1.2. Actor消息模式 事件驱动 2

    并发编程含义比较广泛,包含多线程编程.多进程编程及分布式程序等 目录 1. "共享内存系统",消息传递系统". 1 1.1. 共享模式 多进程 多线程 1 1.2. Ac ...

  5. python 多进程_说说Python多线程与多进程的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  6. python协程与多线程比较_python-协程、多线程、多进程性能比较

    基本概念 进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.进程是操作系统动态执行的基本单元. 线程:一个进程中包含若干线程,当然至少有一个线程,线程可以利用进程所拥有的资源.线程是独 ...

  7. php扩展多线程和多进程,PHP 多进程和多线程的优缺点

    PHP 多进程和多线程的优缺点 多进程 1.使用多进程, 子进程结束以后, 内核会负责回收资源 2.使用多进程, 子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. 3.一个常 ...

  8. python爬虫之多线程threading、多进程multiprocessing、协程aiohttp 批量下载图片

    一.单线程常规下载 常规单线程执行脚本爬取壁纸图片,只爬取一页的图片. import datetime import re import requests from bs4 import Beauti ...

  9. linux网络编程:使用多进程实现socket同时收发数据

    转载:http://blog.csdn.net/li_wen01/article/details/52685844 前面已讲过使用一个进程实现服务端和客户端P2P通信的实例,但是它只能同时处理一个客户 ...

最新文章

  1. 中国博士把整个 CNN 都给可视化了,每次卷积 ReLU 池化都清楚
  2. matlab地图掩膜,要素轮廓线掩膜
  3. 8266串口调试助手_开源软件分享-基于WPF的串口调试工具
  4. 查看MySQL表占用空间大小
  5. 嵌入式计算机的发展阶段,嵌入式发展经历了哪四个阶段?
  6. install kinect driver for ARM---38
  7. 【BZOJ1826】【tyvj2644】缓存交换,贪心+堆维护
  8. armbian ubuntu 桌面_Armbian国内源(Ubuntu18.04 Bionic)
  9. YOLO 检测算法分析
  10. Java开发命名规范
  11. 协方差矩阵经线性变化可以变成不相关的
  12. 算法(三)--------扔鸡蛋问题和找零钱问题
  13. 基于Python的淘宝用户行为分析
  14. Android Studio最新稳定版下载 - 百度网盘(更新于2017年7月14日)
  15. ai条码插件免安装_AI条形码插件(含支持Illustrator cs6的条码脚本插件)
  16. 如何让博文在百度上被搜索到
  17. 基于国产银河飞腾多核 DSP +FPGA的图像识别硬件设计与算法实现
  18. 【附源码】计算机毕业设计java在线教学系统设计与实现
  19. 车企数字化转型中的核心技术应用
  20. DenseNet——密集连接的卷积神经网络

热门文章

  1. mysql修改表字段小数点精度_技术篇-将字段类型decimal批量处理从2位改为4位小数点sql,解决数据库存储精度...
  2. 微服务 mysql 连接池_【mysql】druid,连接池和微服务的问题
  3. pads中如何设置等长_标签打印软件中标签间距以及边距如何设置
  4. Android属性动画赏析,Android源码分析—属性动画的工作原理
  5. mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
  6. react-native 改变webview中字体颜色方式
  7. java process 中断_从Java运行外部程序,读取输出,允许中断
  8. 剑指offer:二叉搜索树的第k个结点(中序遍历)
  9. shell 脚本 简易for循环 脚本
  10. 获取指定年月的全部日期放入数组