python随笔系列--多进程多线程并发度初探
大家都知道python中由于GIL这把大锁的存在,导致python的多线程并不是真正的多线程(不同于java等语言)。首先了解下GIL导致的现象:同一时间只能有一个线程占有python解释器(或者,同一时刻只有一个线程对共享资源进行存取);而多进程不受GIL的影响是因为:每个 fork 的进程有一个单独的 GIL。关于GIL的详细内容请自行延申推荐参考。
接下来用一个如下的函数(纯计算,不涉及I/O)放到死循环里对多线程和多进程能使用多少从cpu做测试
测试机cpu正常情况如下
先看不用进程/线程模式:
cpu使用情况如下
多线程模式:
cpu使用情况如下
多进程模式:
cpu使用情况如下
可以看到python中CPU密集的任务,应该优先使用多进程模型;不过对于I/O密集型任务,多线程每个线程遇到I/O操作时,会让出python解释器,从而实现I/O等待这个环节的并发,亦可以实现 出比穿行快得多的程序,而且比多进程更轻量。
转载于:https://blog.51cto.com/kaifly/2358357
python随笔系列--多进程多线程并发度初探相关推荐
- 多CPU/多核/多进程/多线程/并发/并行之间的关系
多CPU,多核,多进程,多线程 当面临这些问题的时候,有两个关键词无法绕开,那就是并行和并发. 首先,要先了解几个概念: 1.进程是程序的一次执行. 2.进程是资源分配的基本单位(调度单位). 3.一 ...
- 网络爬虫--18.python中的GIL(全局解释器锁)、多线程、多进程、并发、并行
参考文献: python的GIL.多线程.多进程 并发和并行的区别? GIL(全局解释器锁)一看就懂的解释! 多谢作者分享!
- python并发编程之semaphore(信号量)_Python 并发编程系列之多线程
Python 并发编程系列之多线程 2 创建线程 2.1 函数的方式创建线程 2.2 类的方式创建线程 3 Thread 类的常用属性和方法 3.1 守护线程: Deamon 3.2 join()方法 ...
- Python高并发爬虫测评(2): 多进程, 多线程和异步协程哪个快?
在Python爬虫下一代网络请求库httpx和parsel解析库测评一文中我们对比了requests的同步爬虫和httpx的异步协程爬虫爬取链家二手房信息所花的时间(如下所示:一共580条记录),结果 ...
- python 多进程并发与多线程并发总结
本文对python支持的几种并发方式进行简单的总结. Python支持的并发分为多线程并发与多进程并发(异步IO本文不涉及).概念上来说,多进程并发即运行多个独立的程序,优势在于并发处理的任务都由操作 ...
- 并发编程含义比较广泛,包含多线程编程、多进程编程及分布式程序等 目录 1. “共享内存系统”,消息传递系统”。 1 1.1. 共享模式 多进程 多线程 1 1.2. Actor消息模式 事件驱动 2
并发编程含义比较广泛,包含多线程编程.多进程编程及分布式程序等 目录 1. "共享内存系统",消息传递系统". 1 1.1. 共享模式 多进程 多线程 1 1.2. Ac ...
- python多线程并发_Python进阶记录之基础篇(二十四)
回顾 在Python进阶记录之基础篇(二十三)中,我们介绍了进程的基本概念以及Python中多进程的基本使用方法.其中,需要重点掌握多进程的创建方法.进程池和进程间的通信.今天我们讲一下Python中 ...
- Python中单线程、多线程与多进程的效率对比实验
Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread)的情况下,不能发挥多核的优势.而使用多进程(Multiprocess),则可以发挥多 ...
- python中的多进程与多线程(二)
1.使用多线程可以有效利用CPU资源,线程享有相同的地址空间和内存,这些线程如果同时读写变量,导致互相干扰,就会产生并发问题,为了避免并发问题,绝不能让多个线程读取或写入相同的变量,因此python中 ...
最新文章
- 2022-2028年中国UTM市场投资分析及前景预测报告
- 精美的电路图都是怎么画出来的?
- ORACLE学习笔记--性能优化2
- linux c ping 分析实现
- Nginx:几种负载均衡调度策略配置
- 手势识别兼容Android 1.x和2.x的代码【转】
- Apache Camel中的断路器模式
- 前端学习(1663):前端系列实战课程之禁止保存
- gta4 l3环境优化补丁_【安全刻不容缓】快给你们的爱7打打补丁吧 俄罗斯大佬的持续更新补丁包来了...
- 生产数据库更新忙,没有超时
- java语言开发的中间件名称,值得收藏!
- ElementUI:项目中引入自己的ICON
- Go语言strings和strconv包
- 部署免安装版MySQL
- linux so fprintf,Linux下printf、fprintf、sprintf的区别
- 学术英语阅读与写作6:讨论和结论discussion and conclusion
- adobe安装错误代码183
- 查询快递单号,自动识别快递公司
- mac os x 使用教程_如何在Mac OS X计算机上使用扫描仪
- java毕业设计数码产品导购网站mybatis+源码+调试部署+系统+数据库+lw
热门文章
- Think In Java读书笔记:内部类覆盖及其初始化
- 线性地址到物理地址的映射
- Arcgis for javascript不同的状态下自己定义鼠标样式
- java web中Jdbc访问数据库步骤通俗解释(吃饭),与MVC的通俗解释(做饭)
- VC++实现数据包嗅探
- STL里面的sort()函数使用结构体
- 匿名管道 c++实现
- STM32工作笔记0072---UCOSIII在STM32F103上的移植
- 一叶知秋:“安全“的野指针、 static函数、成员函数、this 指针、gcc编译器、name mangling
- python越来越慢_为什么我的算法越来越慢?