并发编程(三)Python编程慢的罪魁祸首。全局解释器锁GIL
并发编程(四)如何使用多线程,使用多线程对爬虫程序进行修改及比较
并发编程(七)好用的线程池ThreadPoolExecutor
并发编程(九)使用多进程multiprocessing加速程序运行
扫描二维码关注公众号,回复:
12917817 查看本文章
并发编程(十二)使用subprocess启动电脑任意程序(听歌、解压缩、自动下载等等)
-
python并发编程的三种方式:
-
多线程Thread
-
多进程Process
-
多协程Coroutine
-
-
CPU密集型计算、IO密集型计算
-
在了解以上三者对比之前,我们先来了解一下什么是CPU密集型计算、IO密集型计算
-
CPU密集型计算(CPU-bound):
- CPU密集型也叫计算密集型,是指IO在很短的时间就可以完成,CPU需要大量的计算处理,特点是CPU占有率相当高
- 例如:压缩和解压缩、加密解密、正则表达式搜索
-
IO密集型计算(IO-bound):
-
IO密集型是指系统运行大部分的状况是CPU在等待IO(硬盘/内存)的读写操作,CPU占有率较低。
-
例如:文件处理程序、网络爬虫程序、读写数据库程序
-
-
-
多线程、多进程、多协程的对比
- 多进程Process(multiprocessing)
- 优点:可以利用多核CPU进行运算
- 缺点:占用资源最多,可启动数目比线程少(受硬件CPU数量限制)
- 适用于:CPU密集型计算
- 多线程Thread(Threading):
- 优点:相比进程,更加轻量级,占用资源少
- 缺点:
- 先比进程,多线程只能并发执行,不能使用多CPU(GIL全局解释器锁)
- 相比协程,启动数目有限制,占用内存资源,有线程切换开销
- 适用于:IO密集型计算、同时运行的任务数目要求不多。
- 多协程Coroutine(asyncio)
- 优点:内存开销最小,启动数量最多,甚至可以多达几万个
- 缺点:python的支持库有限制(例如协程不能使用requests库只能使用aiohttp),而且实现起来也比较复杂。
- 适用于:IO密集型计算、需要超多任务运行的场景、但是也必须是有python现有库支持的场景
- 一个进程中可以启动多个线程
- 一个线程中国也可以启动多个协程
- 多进程Process(multiprocessing)