最近在学习协程。
在百度上看了很多资料,先来介绍下协程吧。在这里把学习到的整理下。
协程就是一个用户态的轻量级的线程。
协程的好处:
跨平台
跨体系架构
无需线程上下文切换的开销
无需原子操作锁定及同步的开销
方便切换控制流,简化编程模型
高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。
缺点:
无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。
进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序:这一点和事件驱动一样,可以使用异步IO操作来解决。
为了能更好的证明协程在性能方面的强大之处,首先我用flask模拟一个慢请求:
这样就模拟一个慢的响应了。
首先我用单线程来模拟。
下面我们用协程来完成协程来玩成。
这里要用到asyncio和aiohttp这两个库,然后我们来比较下运行时间。
才3秒多 ,效果可想而知。