> For the complete documentation index, see [llms.txt](https://kerasnoone.gitbook.io/garnet/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kerasnoone.gitbook.io/garnet/gong-cheng-zhan/python/bing-fa/xie-cheng/0x00-xie-cheng.md).

# 0x00 协程

**协程**(Coroutine), 又称**纤程**.

* **函数**/**子程序**: 在程序中是层级调用的, 例如函数A调用函数B, 函数B再调用函数C. C执行完毕后返回到B, B执行完毕后返回到A, 最后A执行完毕. 子程序的调用时通过**栈**实现的.
  * **一个线程就是一个子程序**
  * 子程序总是一个入口, 一个出口, 调用顺序是明确的
* **协程**: 协程的运行与子进程相似, 但执行过程中, 在子程序的**内部**可中断, 转而去执行别的子程序, 在适当的时候再回来继续执行.
  * 多个子程序都是在**一个线程**中执行
  * 与多线程相比, 优势在于:
    * 极高的执行效率: 子程序的执行不是线程切换, **由程序自身控制**, 没有**线程切换的开销**. 和多线程比, 线程数量越多, 写成的优势越明显
    * 不需要多线程的锁机制, 因为**只有一个线程**, 不存在同时写变量的冲突. 因此, 在写成中的共享资源不用加锁, 执行效率又进一步提高
  * 写成是在一个线程中执行, 为了利用多核CPU, 可以采用**多进程+协程**的方法, 获得高性能
