Python 协程和异步编程

协程和异步编程

  1. 解释器(读取源代码,生成指令让计算机硬件执行)

    (1)CPython:原生,C语言实现的Python,解释器以C语言开发

    (2)IPython:基于CPython,交互上增强。

    (3)PyPy:PyPy采用JIT(即时编译),对Python代码进行动态编译

    (2)Jpython:运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行

  2. GIL

    定义:(CPython特有)全局解释锁,控制任何时刻只有一个线程在运行。

    目的:防止两个线程同时操作一个对象

    限制:多核处理器可能出现线程频繁切换,但只有一个线程真正执行

    导致:python只能实现并发(某一时刻,只有一个任务在处理器执行);不能实现并行(同时运行)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SaZ5biE1-1615364584272)(file:///C:/Users/hujiayan/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]

  3. 多线程 threading

    运行在一个进程里,为保障安全需要加锁,cpu抢占式调度

  4. 协程

    在一个线程里实现任务的切换和交叉运行,通过yield(产出/让步)和send(传递参数到协程对象内)来进行人为控制实现调度

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iF8l0yZT-1615364584274)(file:///C:/Users/hujiayan/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]

  5. 异步编程

    采用了IO复用的方法实现非阻塞的操作,通过注册读事件或写事件,当事件发生触发回调,让程序继续执行后面逻辑(协程+asyncio)

总结

由于在Python中有GIL的存在,实际只能有一个线程运行,使用多线程的效果可能不一定比单线程更佳。但是可通过协程,即异步编程方式,在线程内部实现更高效快速的切换和调度,增加程序运行速度。另外,GIL只存在于一个Python进程内,Python进程间是不共用的,因此使用多进程+协程的代码实现,有利于充分利用处理器资源,提升应用性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值