软件测试肖sir__多线程、多进程、多协程
Python并发编程有三种方式:
1、多线程Thread(threading)(读音:思来d,丁)、多进程Process(multiprocessing)、多协程Coroutine(asyncio)
(1)一个进程中科院启动n个线程
(2)一个线程中可以启动n个协程
(3)Thread
优点: 相比进程,更轻量级、占用资源少
缺点: 相比集成,多线程只能并发执行,不能利用多cpu(gIL)
相比协程:启动数目有限制,占用内存资源,有 线程切换
适用于:io密集型计算、同时运行任务数目不多
(4)coroutine(asyncio)协程
优点:内存开销最少,启动协程数量最多
缺点:支持的库有限制,代码实现复杂
比如:requests就不能
适用:io密集型计算,需要超多任务运行,但有现成库支持的场景
(5)Process(multiprocessing)
优点: 可以利用多核cpu并行运算
缺点:占用资源最多,可启动数目比线程少
适用于:cpu密集型计算
(6)选择性
2、CPU密集型(CPU-bound) :
CPU密集型也叫计算密集型,是指I/O在很短的时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高
例如:压缩解压缩、加密解密、正则表达式搜索
3、Io密集型(I/o bound) :
IO密集型指的是系统运作大部分的状况是CPU在等/O(硬盘/内存)的读/写操作,CPU占用率仍然较低。
例如:例如:文件处理程序、网络爬虫程序读写数据库程序
4 、
=============================================
二、
1、Python速度慢的两大原因
答:背景:相比C/C++/JAVA, Python确实慢,在一些特殊场景下,Python比C++慢100~200倍
由于速度慢的原因,很多公司的基础架构代码依然用C/C++开发
比如各大公司阿里/腾讯/快手的推荐引擎搜索引擎、存储引擎等底层对性能要求高的模块
原因:
(1)动态类型语言,边解释,边运行
(2)GIL无法利用多核cpu并发执行
2、GIL是什么?
全局解释器锁(英语:Global Interpreter Lock,缩写GIL)
是计算机程序设计语言解释器用于同步线程的一种机制,它使得任何时刻仅有一个线程在执行。
即便在多核心处理器上,使用GIL的解释器也只允许同一时间执行一个线程。
3、为什么有GIL这个东西?
主要是:为了解决多线程之间数据完整性和状态同步问题
Python设计初期,为了规避并发问题引入了GIL,现在想去除却去不掉了!
4、怎样规避GIL带来的限制?
1、多线程threading机制依然是有用的,用于IO密集型计算
因为在I/0(read,write,send,recv,etc.)期间,线程会释放GIL,实现CPU和IO的并行因此多线程用于IO密集型计算依然可以大幅提升速度
但是多线程用于CPU密集型计算时,只会更加拖慢速度
========================================
最新文章
- RabbitMQ + PHP (一)入门与安装
- The currently selected variant ";arm-debug"; uses split APKs, but none of the 1 split apks are compatible with the current device with density ";213"; and ABIs ";x86";.
- Gson--Gson解析=等号出现乱码?
- ActivityGroup、TabHost之子页面不刷新——getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
- CentOS 7系统挂载NTFS分区的移动硬盘(转载及体验 CentOS6.5系统挂载NTFS分区的移动硬盘)
- sns社区架构设计案例分享(二)
- mysql以ROOT权限提权方法
- Blocks_DP&;&;矩阵快速幂
- win7 共享的问题,";您可能没有权限使用网络资源";的解决办法
- Microsoft SQL2000 错误代码 (@@error)
- (二)ROS系统架构及概念 ROS Architecture and Concepts 以Kinetic为主更新 附课件PPT
- 2017/2/14:JSTL标签与el表达式
- Ubuntu 14.04 安装 DevStack与遇到的的问题记录
- tcpdump-根据IP查看程序与服务都用了哪些端口
- key寻址算法
- 【POJ2420】A star not a tree?
- maven部署Tomcat(出现空白页面,最终解决)
- Luogu-3705 [SDOI2017]新生舞会
- vue组件 $children,$refs,$parent的使用
- pl/sql的控制结构,分支、循环、控制