When a coroutine begins execution
When a coroutine reaches a suspension point
When a coroutine reaches the co_return statement
If the coroutine ends with an uncaught exception
When the coroutine state is destroyed either because it terminated via co_return or uncaught exception, or because it was destroyed via its handle
作为@Adam Arold在@user217714的回答下的评论。这是并发。< br >
但它与多线程不同。
从std::线程 < / p >
A-Start ------------------------------------------ A-End
| B-Start -----------------------------------------|--- B-End
| | C-Start ------------------- C-End | |
| | | | | |
V V V V V V
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->|
与多线程解决方案相比:
thread A->|<--A| |--A-->|
thread B------>|<--B| |--B-->|
thread C ---------->|<---C| |C--->|
如果你仍然困惑,这里有一个非常简单的方法来理解co-routine。首先,什么是routine?用外行的话来说,例行公事就是我们一遍又一遍地做的事情(例如,你早上的例行公事)。类似的。在编程语言中,routine是我们反复使用的一段代码,例如a function。现在,如果你看一下function or routine的一般特征(注意:我谨慎地交替使用这两个术语),它需要一些输入,只要函数需要输出结果,它就会占用CPU线程。意思是,functions or routines阻塞了你代码中的调用。然而,co-routine是一种特殊的例程,可以共存("co"“协同例程”这个词的一部分来自于这个),同时与其他例程一起使用,我们可以在编程语言中借助异步编程实现这一点。在异步编程中,当一个协例程正在等待某些事情发生时(例如磁盘io),另一个协例程将开始工作,当这个协例程处于等待状态时,另一个协例程将处于活动状态,最终减少代码的等待时间。