python笔记 -- 并发(一些理论)

1、python中的并发编程

  • 多线程:模块threading,单核cpu,多任务
  • 多进程:模块multiprocessing,多核cpu,真正的并行执行
  • 异步IO:模块asyncio,在单线程但是cpu和io同时执行

使用Lock对资源加锁,防止访问冲突
使用Queue实现多进程/线程之间的通信
使用线程池/进程池
使用模块subprocess启动外部程序的进程

2、三种并发方式

2.1、cpu密集型和io密集型

  • cpu密集型:程序运行的速率受限于cpu
    如:压缩解压、加密解密
  • io密集型:程序运行的速率受限于io
    如:读写内存、爬取数据

2.2、进程、线程、协程

一个进程中可启动多个线程,一个线程中可启动多个协程

  • 进程process(multiprocessing)
    优点:可利用多核cpu并行计算
    缺点:占用资源多,并发数量比线程少
    适用于:cpu密集型计算
  • 线程thread(threading)
    优点:相比进程,更轻量,占用资源少
    缺点:不能利用多cpu(GIL),并发数量有限,占用内存资源
    适用于:IO密集型计算,同时运行的数目不多
  • 协程coroutine(asyncio)
    优点:内存开销小、支持很大的并发数量
    缺点:有些库不支持、代码复杂
    适用于:IO密集型计算,需要启动大量的任务

3、GIL

全局解释性锁GIL(Global interpreter lock)
为了解决多线程之间数据完整性和状态同步的问题
它的机制是:任何时刻只能由一个线程在执行,即使在多核cpu上

3.1、python运行慢的两大原因

  1. python是边解释边执行
  2. GIL,无法利用多核cpu并发执行

3.2、如何规避

  1. 在IO(读、写、发送、接收等)期间,线程会释放GIL,实现cpu和io并行
  2. 使用多进程实现并行

参考:【2021最新版】Python 并发编程实战
原作者:蚂蚁学Python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值