协程

介绍

协程,又称微线程,纤程。英文名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


原文出处:/show_1EF5ccKc6go0.html