【发布时间】:2011-05-02 02:41:17
【问题描述】:
我正在研究 twisted 和 node.js 框架是如何工作的,我正在 试图准确了解操作系统如何支持 I/O 使用回调的操作。
我知道这很好,因为我们需要更少的线程,因为我们不需要 需要有阻塞线程等待 I/O 操作。但是有些东西 I/O 完成后必须调用回调。
操作系统是如何实现的?
【问题讨论】:
标签: networking asynchronous io nonblocking event-driven
我正在研究 twisted 和 node.js 框架是如何工作的,我正在 试图准确了解操作系统如何支持 I/O 使用回调的操作。
我知道这很好,因为我们需要更少的线程,因为我们不需要 需要有阻塞线程等待 I/O 操作。但是有些东西 I/O 完成后必须调用回调。
操作系统是如何实现的?
【问题讨论】:
标签: networking asynchronous io nonblocking event-driven
一种方法是让操作系统附加有关等待回调相关数据结构的任何人的信息,例如您等待读取通知的文件描述符的内核等效项。当该文件描述符发生问题时,操作系统会扫描服务员以查看是否应通知任何服务员。如果他们应该这样做,那么它就会这样做。您可以在Lemon's paper introducing FreeBSD's kqueue mechanism 中阅读有关此功能的一种实现。具体参见第 6 节“实施”、第 3 和第 4 小节“事件源活动”和“交付”。
【讨论】:
这在 OS 中通过使用“I/O 事件通知工具/接口”解决,例如 epoll、poll、kqueue 或 select。
查看deft,尤其是它的io/event loop,了解如何使用上述“通知系统”的具体示例。 (java.nio.channels.Selector 是 java nio 为其提供抽象的方式。)
免责声明:我是一个灵巧的提交者
【讨论】: