linux 多线程 多进程 利用率,多进程与多线程的深度比较
嵌入式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 多线程 多进程 利用率,多进程与多线程的深度比较相关推荐
- linux的多任务 多进程,浅谈linux模拟多线程崩溃和多进程崩溃
结论是: 多线程下如果其中一个线程崩溃了会导致其他线程(整个进程)都崩溃: 多进程下如果其中一个进程崩溃了对其余进程没有影响: 多线程 #include #include #include #incl ...
- 第4章 Linux网络编程 22.多进程实现并发服务器、多线程实现并发服务器
目录 多线程实现并发服务器 多进程实现并发服务器 多线程实现并发服务器 server_thread.c #include <stdio.h> #include <arpa/inet. ...
- python多线程_干货|理解python多线程和多进程
点击上方"AI遇见机器学习",选择"星标"公众号 原创干货,第一时间送达 一.多线程与多进程 在介绍Python多线程编程之前,先给大家复习一下进程和线程的概念 ...
- 并发编程含义比较广泛,包含多线程编程、多进程编程及分布式程序等 目录 1. “共享内存系统”,消息传递系统”。 1 1.1. 共享模式 多进程 多线程 1 1.2. Actor消息模式 事件驱动 2
并发编程含义比较广泛,包含多线程编程.多进程编程及分布式程序等 目录 1. "共享内存系统",消息传递系统". 1 1.1. 共享模式 多进程 多线程 1 1.2. Ac ...
- python 多进程_说说Python多线程与多进程的区别?
公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...
- python协程与多线程比较_python-协程、多线程、多进程性能比较
基本概念 进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.进程是操作系统动态执行的基本单元. 线程:一个进程中包含若干线程,当然至少有一个线程,线程可以利用进程所拥有的资源.线程是独 ...
- php扩展多线程和多进程,PHP 多进程和多线程的优缺点
PHP 多进程和多线程的优缺点 多进程 1.使用多进程, 子进程结束以后, 内核会负责回收资源 2.使用多进程, 子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. 3.一个常 ...
- python爬虫之多线程threading、多进程multiprocessing、协程aiohttp 批量下载图片
一.单线程常规下载 常规单线程执行脚本爬取壁纸图片,只爬取一页的图片. import datetime import re import requests from bs4 import Beauti ...
- linux网络编程:使用多进程实现socket同时收发数据
转载:http://blog.csdn.net/li_wen01/article/details/52685844 前面已讲过使用一个进程实现服务端和客户端P2P通信的实例,但是它只能同时处理一个客户 ...
最新文章
- 中国博士把整个 CNN 都给可视化了,每次卷积 ReLU 池化都清楚
- matlab地图掩膜,要素轮廓线掩膜
- 8266串口调试助手_开源软件分享-基于WPF的串口调试工具
- 查看MySQL表占用空间大小
- 嵌入式计算机的发展阶段,嵌入式发展经历了哪四个阶段?
- install kinect driver for ARM---38
- 【BZOJ1826】【tyvj2644】缓存交换,贪心+堆维护
- armbian ubuntu 桌面_Armbian国内源(Ubuntu18.04 Bionic)
- YOLO 检测算法分析
- Java开发命名规范
- 协方差矩阵经线性变化可以变成不相关的
- 算法(三)--------扔鸡蛋问题和找零钱问题
- 基于Python的淘宝用户行为分析
- Android Studio最新稳定版下载 - 百度网盘(更新于2017年7月14日)
- ai条码插件免安装_AI条形码插件(含支持Illustrator cs6的条码脚本插件)
- 如何让博文在百度上被搜索到
- 基于国产银河飞腾多核 DSP +FPGA的图像识别硬件设计与算法实现
- 【附源码】计算机毕业设计java在线教学系统设计与实现
- 车企数字化转型中的核心技术应用
- DenseNet——密集连接的卷积神经网络
热门文章
- mysql修改表字段小数点精度_技术篇-将字段类型decimal批量处理从2位改为4位小数点sql,解决数据库存储精度...
- 微服务 mysql 连接池_【mysql】druid,连接池和微服务的问题
- pads中如何设置等长_标签打印软件中标签间距以及边距如何设置
- Android属性动画赏析,Android源码分析—属性动画的工作原理
- mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
- react-native 改变webview中字体颜色方式
- java process 中断_从Java运行外部程序,读取输出,允许中断
- 剑指offer:二叉搜索树的第k个结点(中序遍历)
- shell 脚本 简易for循环 脚本
- 获取指定年月的全部日期放入数组