Python并发编程——多线程thread,多进程process,多协程coroutine的区别与选择

1. IO-Bound与CPU-Bound

  • IO-Bound
            IO-Bound指的是程序的运行效率受计算机IO能力的限制。在程序的运行过程中,我们可能经常需要使用到计算机IO,如文件的读写操作,网络拉取下载操作等等。在这些情况下,由于IO操作没有返回相应的结果,程序不得不中止并等待。
  • CPU-Bound
           CPU-Bound指的是计算机程序的运行效率主要受到CPU能力的限制。如解压缩,正则表达式搜索等等。

2.多进程,多线程,多协程的对比

  • 三者之间存在明显的层级关系,进程最大,一个进程可以启动多个线程,而一个线程则可以启动多个协程。
  • 只有多进程可以在多核CPU中进行运算;线程与协程因受限于单个进程中所以只能运行在单核CPU中。
  • 资源消耗,多进程 > 多线程 > 多协程
  • 多进程适合解决CPU-Bound问题;因为多进程可以在多核CPU中进行运算。
  • 多线程与多协程适合解决IO-Bound问题;理论上多线程同样能够提升CPU的运行效率,但由于python中GIL(全局解释器锁:其存在是为了规避多线程使用过程中可能出现的数据完整性与同步问题;基本功能是使得一个进程中某一时刻最多只有一个线程在运行)的存在没有办法实现CPU加速,但由于其在使用IO的过程中会释放GIL,因此能够更高效地使用IO。
  • 多协程概念较新,可以同时启动非常多个,但目前还只支持特定库。
    在这里插入图片描述

3.如何进行选择?

  • 一:任务性质判断:IO-Bound还是CPU-Bound?如果是CPU-Bound选择多进程(multiprocessing)
  • 二:任务量是否巨大?是否有现成的协程库支持?复杂度是否能够接受?如果答案持否,选择多进程(threading);否则可以尝试使用多协程(asyncio)
    在这里插入图片描述
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值