什么是协程
2019-05-09 21:22
127 查看
版权声明:转载请注明 https://blog.csdn.net/twt936457991/article/details/90048234
什么是协程
协程,英文名是 Coroutine, 又称为微线程,是一种用户态的轻量级线程。协程不像线程和进程那样,需要进行系统内核上的上下文切换,协程的上下文切换是由程序员决定的。
协程相对于多线程的优点
多线程编程是比较困难的, 因为调度程序任何时候都能中断线程, 必须记住保留锁, 去保护程序中重要部分, 防止多线程在执行的过程中断。
而协程默认会做好全方位保护, 以防止中断。我们必须显示产出才能让程序的余下部分运行。对协程来说, 无需保留锁, 而在多个线程之间同步操作, 协程自身就会同步, 因为在任意时刻, 只有一个协程运行。总结下大概下面几点:
- 无需系统内核的上下文切换,减小开销;
- 无需原子操作锁定及同步的开销,不用担心资源共享的问题;
- 单线程即可实现高并发,单核 CPU 即便支持上万的协程都不是问题,所以很适合用于高并发处理,尤其是在应用在网络爬虫中。
协程的缺点
同样的总结下大概以下 2 点。
- 无法使用 CPU 的多核
协程的本质是个单线程,它不能同时用上单个 CPU 的多个核,协程需要和进程配合才能运行在多 CPU上。当然我们日常所编写的绝大部分应用都没有这个必要,就比如网络爬虫来说,限制爬虫的速度还有其他的因素,比如网站并发量、网速等问题都会是爬虫速度限制的因素。除非做一些密集型应用,这个时候才可能会用到多进程和协程。
- 处处都要使用非阻塞代码
写协程就意味着你要一值写一些非阻塞的代码,使用各种异步版本的库,比如后面的异步爬虫教程中用的 aiohttp 就是一个异步版本的request库等。 不过这些缺点并不能影响到使用协程的优势。
相关文章推荐
- 协程是什么
- 当我们在说协程时,我们在说些什么?
- 协程是什么
- 协程的好处是什么?
- Unity中的协程是什么?
- 什么是协程?
- [python]回调的问题,以及协程是什么
- 进程、线程和协程的区别是什么
- 进程、线程、协程、例程、过程的区别是什么?
- 数字签名是什么?
- 什么是web标准
- 【Windows7系统装什么浏览器好用】
- 写代码应该用什么字体?
- 中国下一个泡沫是什么?是媒体
- 春节放假干什么?“51CTO七天乐”陪您闹新春!
- 浏览器页面有哪三层构成,分别是什么,作用是什么?
- Struts1和Struts2都有什么区别?
- 高通出手并购Atheros图谋什么?
- 我爱天文 - M1是什么?M31又是什么? ......
- “定义为指针,外部以数组形式引用”和“定义为数组,外部以指针形式引用”会发生什么?