如何实现实用的光纤调度器?

Che*_*ery 9 linux asynchronous scheduling language-implementation

我知道使用协同程序作为基础并实现玩具调度程序的基础知识.但我认为这是关于整体异步调度程序的过于简化的观点.我的想法中缺少一整套漏洞.

如何防止cpu运行正在运行空闲/等待的调度程序?有些光纤只是睡觉,有些则等待来自操作系统的输入.

nos*_*nos 7

您需要将io操作复用到基于事件的界面(选择/轮询),这样您就可以利用操作系统进行等待,同时仍然可以安排其他光纤.select/poll具有超时参数 - 对于要休眠的光纤,您可以创建一个优先级队列,该队列使用select/poll选项来模拟睡眠调用.

尝试提供阻塞操作的光纤(调用读/写/睡眠等).除非你在本机线程中安排每根光纤,否则直接无法工作 - 这种目的是什么.

有关可行的实现,请参见http://swtch.com/libtask/.


小智 5

你应该看一下setcontext函数系列(http://en.wikipedia.org/wiki/Setcontext).这意味着在您的应用程序中,您将需要重新实现可能阻塞(读取,写入,休眠等)到异步形式的所有函数并返回到调度程序.

只有"scheduler fiber"才能使用select(),poll()或epoll()等待完成事件.这意味着当调度程序空闲时,进程将在select/poll/epoll调用中休眠,并且不会占用CPU.