一般协程库要三个部分:
1. 基础的协程切换,一般由语言库(c++ co_await)或者操作系统(swap_context)搞定
2. 事件循环以及协程调度(线程内与线程间调度)
3. 包装 IO 使其协程化。
你缺少的是完整的第二个部分啊。你看一下本版 xmake 的作者的那个 c 协程库处理得很好。C++ 的协程库则比较多,有 libgo, cppcoro 这两个 star 数最多的,libgo 是 oppo 那伙人搞的。
https://github.com/yyzybb537/libgo/blob/master/libgo/routine_sync/timer.h
简单地讲,就是几百个 FD 排个序,看你用 heap 还是 list 都行。然后取第一个 fd 的超时就行了。
我看你还在折腾第一部分,如果是你是 c 程序员,折腾第一部分是正常的,c 程序员总是爱发明底层轮子。但 cpp 程序员的第一部分要么用标准库,要么用 boost::context,别自己折腾了。栈这些东东太底层了。
协程被搞出来已经几十年了。但是一直没有好用的环境。曾经 Python 和 JavaScript 是最接近协程原生语言这个目标的,被两个语言的设计师抄 C# 的 async/await 给搞砸了。
【 在 ylh0315 的大作中提到: 】
: 里边几百个fd,谁管得了谁呀。
--
修改:hgoldfish FROM 183.253.146.*
FROM 183.253.146.*