自己维护纤程的情况还是不少的,我以前一个项目用到了lua,lua里又调用了pgsql,业务要求lua脚本不能阻塞住它的线程,就需要把lua的pgsql的接口实现为非阻塞,再实现一套co_yield将控制权还给它的线程,线程处理完其它事情并查询到pgsql已经完成事务,再把控制权还给lua让脚本继续执行。我在Linux下用的是swapcontext / makecontext / getcontext(POSIX 2001,已废弃),这些函数曾是实现协程的经典方式,但 POSIX.1-2008 已废弃它们。
现在想用就是汇编的实现比如boost.context,或者C++20的co_await那套无栈式协程,性能更好。
【 在 hgoldfish 的大作中提到: 】
: 首先,可以不存在事件循环。协程之间自行切换。例子是 generator 模式。我在写编译器的时候,lexer 和 compiler 都是协程,它俩来回切换。
: 其次,存在没有 io poll 的事件循环。也就是纯粹的 timer 循环。事件循环里面只有 timer 事件,没有其它事件。
: 最后呢,事件循环不一定用 epoll. windows 下也可以用 iocp, linux 下还有 io_uring 等等。
: ...................
--
修改:poocp FROM 171.221.52.*
FROM 171.221.52.*