Python中进程、线程、协程区别

Python中进程、线程、协程区别

多进程

适合密集CPU任务,充分利用多核CPU资源(大量的并行计算,循环计数运算)
缺点:
多个进程之间的通信成本和切换开销很高,如果程序涉及到大量数据通信或切换任务,不适合用多进程
multiprocessing

多线程

密集IO任务(网络IO,磁盘IO,数据库IO)
threading,multiprocessing.dummy
缺点:同一个时间内存一次只能运行一个线程,可以做到并发,但是不能做到并行
优点:通信方便,切换开销小(非常适合爬虫这种不断切换任务的场景)

协程

微线程,不由操作系统调度(没有CPU切换开销),特点是在单个线程上切换多个函数任务,切换掉段任务由程序员控制,不涉及操作系统管理,也不需要处理器
gevent
gevent.monkey.patch_all():降Python底层的网络库(socket,select)打个补丁,在执行网络任务时可以按异步的方式执行(涉及到网络IO阻塞会自动切换协程)
优点:
执行任务基于程序员管理,不需要操作系统调度,没有切换开销,执行效率非常高。
缺点:
单线程执行,不能处理密集CPU任务,本地磁盘密集IO任务
注意:协程是在原有的网络请求库上打了补丁,所以适用于爬虫。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值