事件驱动编程是如何实现的?

时间:2010-10-28 20:38:21

标签: networking asynchronous io nonblocking event-driven

我正在研究twisted和node.js框架是如何工作的,而我是 试图准确理解操作系统如何支持I / O. 使用回调的操作。

我理解它很好,因为我们不需要更少的线程 需要阻塞线程等待I / O操作。但有些事情 必须在I / O完成后调用回调。

操作系统如何实现?

2 个答案:

答案 0 :(得分:5)

一种方法是让操作系统附加有关等待回调到相关数据结构的任何人的信息,例如您正在等待读取通知的文件描述符的内核内等效项。当该文件描述符发生某些事情时,操作系统会扫描服务员以查看是否应该通知任何文件描述符。如果他们应该,那么它就这样做了。您可以在Lemon's paper introducing FreeBSD's kqueue mechanism中阅读有关此内容的一个实现。特别参见第6节“实施”,第3和第4小节,“事件来源活动”和“交付”。

答案 1 :(得分:3)

这可以通过使用“I / O事件通知工具/接口”在操作系统中解决,例如epoll,民意调查,kqueue或选择。

查看deft,特别是其io/event loop,了解如何使用上述“通知系统”的具体示例。 (java.nio.channels.Selector是java nio为此提供抽象的方法。)

免责声明:我是一名灵巧的提交者