【理论篇】从0到1实现基于协程的WebServer(1) —— coroutine协程
什么是协程
协程是能暂停执行以在之后恢复的函数。
协程分为有栈协程和无栈协程。有栈协程在协程之间存在函数调用栈,保存了单独的上下文环境,可在嵌套函数中暂停执行。而无栈协程所有协程共享一个执行栈,本质上是一个状态机。
C++20中的协程
C++20 的协程是无栈协程,它们通过返回到调用方暂停执行,并且恢复执行所需的数据与栈分离存储。协程函数中需包含 co_await、co_yield、co_return 三个表达式的中的至少一个。
使用 co_return 的协程co_return 用于结束协程,并可返回一个值。
无返回值的协程#include <coroutine>#include <iostream>struct Promise { auto initial_suspend() noexcept { std::cout << "initial_suspend" << std::endl; return std::suspend_always{}; } ...