python中多进程、多线程、进程池和线程池、协程的简单理解举例

一、python中多进程、多线程、进程池和线程池、协程的简单理解举例:

1、在python中由于GIL(全局解释器锁)的存在,同一个时刻只能有一个线程在一个cpu上运行,所以使用多线程的时候,利用不上cpu多核的性能,
    所以,多线程适合使用在io密集型计算中,而且需要注意的是,只要多线程中有一个线程对cpu消耗大,那么整体的性能立马会大大下降。
2、GIL的存在是python历史遗留的问题,短时间不是很有希望得到大大改善,虽然也有很多人在为他努力。
   所以,在cpu密集型计算时候,建议使用多进程。或者使用多进程结合多线程的方法提高程序性能。
3、另外,无论是多线程还是多进程,它的创建和消耗都会消耗cpu,所以建议使用线程池、进程池的方式,减少频繁的创建和消耗线程、进程而消耗cpu。

4、协程和线程的区别在于,线程的调度是cpu控制,而协程是程序控制(生成器原理),效率会高很多,使用协程的时候,当其中一个任务等待io时,会自动切换到另一个,保证不会让io有空闲,建议使用gevent模块

5、协程和多线程适合用再io密集型,多进程时候用再cpu密集型(利用上多核cpu), 具体怎么使用三者,需要根据业务实际情况测试后才知道。

二、多线程可以使用threading模块,但是建议使用concurrent.futures.ThreadPoolExecutor模块
    使用map方法可以自动收集汇总各线程的结果集,语法简洁,其中返回是一个generator生成器

    from co
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值