我知道有关使用协程作为基础并实现玩具调度程序的基本知识。但是我认为它对于整个异步调度程序来说过于简单了。我的想法中缺少一整套漏洞。
如何防止cpu运行正在空闲/正在等待的调度程序?一些光纤刚刚进入睡眠状态,其他一些则等待来自操作系统的输入。
您需要将io操作复用到基于事件的接口(选择/轮询)中,以便可以利用OS进行等待,同时仍然可以调度其他光纤。select / poll具有超时参数- 对于要hibernate的光纤,您可以创建一个优先级队列,该优先级队列使用select / poll的该选项模拟hibernate呼叫。
尝试提供会阻塞操作的光纤(调用读/写/睡眠等)。除非您在本地线程中安排每根光纤,否则直接将无法工作-这超出了目的。
有关有效的实现,请参见http://swtch.com/libtask/。