大家都知道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随笔系列--多进程多线程并发度初探相关推荐

  1. 多CPU/多核/多进程/多线程/并发/并行之间的关系

    多CPU,多核,多进程,多线程 当面临这些问题的时候,有两个关键词无法绕开,那就是并行和并发. 首先,要先了解几个概念: 1.进程是程序的一次执行. 2.进程是资源分配的基本单位(调度单位). 3.一 ...

  2. 网络爬虫--18.python中的GIL(全局解释器锁)、多线程、多进程、并发、并行

    参考文献: python的GIL.多线程.多进程 并发和并行的区别? GIL(全局解释器锁)一看就懂的解释! 多谢作者分享!

  3. python并发编程之semaphore(信号量)_Python 并发编程系列之多线程

    Python 并发编程系列之多线程 2 创建线程 2.1 函数的方式创建线程 2.2 类的方式创建线程 3 Thread 类的常用属性和方法 3.1 守护线程: Deamon 3.2 join()方法 ...

  4. Python高并发爬虫测评(2): 多进程, 多线程和异步协程哪个快?

    在Python爬虫下一代网络请求库httpx和parsel解析库测评一文中我们对比了requests的同步爬虫和httpx的异步协程爬虫爬取链家二手房信息所花的时间(如下所示:一共580条记录),结果 ...

  5. python 多进程并发与多线程并发总结

    本文对python支持的几种并发方式进行简单的总结. Python支持的并发分为多线程并发与多进程并发(异步IO本文不涉及).概念上来说,多进程并发即运行多个独立的程序,优势在于并发处理的任务都由操作 ...

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

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

  7. python多线程并发_Python进阶记录之基础篇(二十四)

    回顾 在Python进阶记录之基础篇(二十三)中,我们介绍了进程的基本概念以及Python中多进程的基本使用方法.其中,需要重点掌握多进程的创建方法.进程池和进程间的通信.今天我们讲一下Python中 ...

  8. Python中单线程、多线程与多进程的效率对比实验

    Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread)的情况下,不能发挥多核的优势.而使用多进程(Multiprocess),则可以发挥多 ...

  9. python中的多进程与多线程(二)

    1.使用多线程可以有效利用CPU资源,线程享有相同的地址空间和内存,这些线程如果同时读写变量,导致互相干扰,就会产生并发问题,为了避免并发问题,绝不能让多个线程读取或写入相同的变量,因此python中 ...

最新文章

  1. 2022-2028年中国UTM市场投资分析及前景预测报告
  2. 精美的电路图都是怎么画出来的?
  3. ORACLE学习笔记--性能优化2
  4. linux c ping 分析实现
  5. Nginx:几种负载均衡调度策略配置
  6. 手势识别兼容Android 1.x和2.x的代码【转】
  7. Apache Camel中的断路器模式
  8. 前端学习(1663):前端系列实战课程之禁止保存
  9. gta4 l3环境优化补丁_【安全刻不容缓】快给你们的爱7打打补丁吧 俄罗斯大佬的持续更新补丁包来了...
  10. 生产数据库更新忙,没有超时
  11. java语言开发的中间件名称,值得收藏!
  12. ElementUI:项目中引入自己的ICON
  13. Go语言strings和strconv包
  14. 部署免安装版MySQL
  15. linux so fprintf,Linux下printf、fprintf、sprintf的区别
  16. 学术英语阅读与写作6:讨论和结论discussion and conclusion
  17. adobe安装错误代码183
  18. 查询快递单号,自动识别快递公司
  19. mac os x 使用教程_如何在Mac OS X计算机上使用扫描仪
  20. java毕业设计数码产品导购网站mybatis+源码+调试部署+系统+数据库+lw

热门文章

  1. Think In Java读书笔记:内部类覆盖及其初始化
  2. 线性地址到物理地址的映射
  3. Arcgis for javascript不同的状态下自己定义鼠标样式
  4. java web中Jdbc访问数据库步骤通俗解释(吃饭),与MVC的通俗解释(做饭)
  5. VC++实现数据包嗅探
  6. STL里面的sort()函数使用结构体
  7. 匿名管道 c++实现
  8. STM32工作笔记0072---UCOSIII在STM32F103上的移植
  9. 一叶知秋:“安全“的野指针、 static函数、成员函数、this 指针、gcc编译器、name mangling
  10. python越来越慢_为什么我的算法越来越慢?