我正在研究twisted和node.js框架是如何工作的,而我正在試圖瞭解操作系統如何支持使用回調的I/O操作 。事件驅動編程是如何實現的?
我明白這很好,因爲我們需要更少的線程,因爲我們不需要 需要阻塞等待I/O操作的線程。但是一旦I/O完成, 必須調用回調。
操作系統是如何實現的?
我正在研究twisted和node.js框架是如何工作的,而我正在試圖瞭解操作系統如何支持使用回調的I/O操作 。事件驅動編程是如何實現的?
我明白這很好,因爲我們需要更少的線程,因爲我們不需要 需要阻塞等待I/O操作的線程。但是一旦I/O完成, 必須調用回調。
操作系統是如何實現的?
一種方法是讓操作系統附上任何人等待回調到相關的數據結構信息,例如您正在等待讀取通知的文件描述符的內核中等價物。當該文件描述符發生某些事情時,操作系統會掃描服務員以查看是否應該通知任何人。如果他們應該,那麼它就是這樣做的。你可以在Lemon's paper introducing FreeBSD's kqueue
mechanism中閱讀關於這個的一個實現。特別參見第6節「實施」,第3和4小節「關於事件源的活動」和「交付」。
這可以通過使用「I/O事件通知設施/接口」(例如epoll,poll,kqueue或select)在OS中解決。
看一看deft,特別是它的'io/event loop的具體例子是如何使用上述「通知系統」。 (java.nio.channels.Selector是java NIO的方式來提供這種抽象。)
免責聲明:我是一個靈巧的提交者