介绍
协程,又称微线程,纤程。英文名Coroutine。协程是一种 用户态 的 轻量级 线程
目前支持协程的语言有:python、go、node.js
应用场景
I/O 密集型任务,比如网络连接,需要0.1秒才能连接上服务器,此时0.1秒的cpu就处于空闲,通过协程可充分利用
与 进程、线程 类似又不同
进程、线程
- 由操作系统实现(也就是说:如果某操作系统不支持多进程 或 多线程,那么无法通过编程实现)
- 由操作系统调用,无法通过代码控制
- 消耗系统资源较大,如:创建新的进程、线程时需要CPU运算、分配内存,切换进程、线程也需要开销
协程
- 由开发语言实现,与操作系统无关
- 可由程序员通过代码控制
- 在一个线程内进行,即:单线程的
- 消耗系统资源较小
优缺点
优点
- 跨平台
- 无需线程上下文切换的开销
- 无需原子操作锁定及同步的开销
- 方便切换控制流,简化编程模型
- 高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。
缺点
- 无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。
- 进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序,因为是单线程的,一旦阻塞就意味该个线程阻塞,可以使用异步IO操作来解决
感谢:
https://juejin.im/post/5d5df6b35188252ae10bdf42