我一直在研究twisted和node.js框架是如何工作的,我试图确切地理解操作系统是如何使用回调支持I/O操作的。
我知道这很好,因为我们需要更少的线程,因为我们不需要阻塞的线程等待I/O操作。但是一旦I/O完成,就必须调用回调。
这是如何由操作系统实现的?
发布于 2010-10-29 05:09:38
一种方法是让操作系统将等待回调的任何人的信息附加到相关的数据结构,例如等待读取通知的文件描述符的内核内等效项。当该文件描述符发生变化时,操作系统会扫描等待程序,看看是否应该通知任何人。如果他们应该这样做,那么它就会这样做。您可以在Lemon's paper introducing FreeBSD's kqueue mechanism中了解到这一点的一种实现。具体见第6节“实现”,第3和第4小节,“事件源上的活动”和“交付”。
发布于 2010-10-29 04:46:00
在操作系统中,这可以通过使用"I/O事件通知工具/接口“来解决,例如epoll、poll、kqueue或select。
看看deft,特别是它的io/event loop,以获得如何使用上面提到的“通知系统”的具体示例。(java.nio.channels.Selector是为此提供抽象的java nio方式。)
免责声明:我是一个灵巧的提交者
https://stackoverflow.com/questions/4046994
复制相似问题