所以我正在阅读我最喜欢的软件模式书籍之一(Pattern-Oriented Software Architecture - Patterns for Concurrent and Networked Objects),特别是关于Proactor/Reactor异步IO模式的部分。我可以看到如何使用可选择通道来轻松实现反应器风格的异步IO机制(而且已经这么做了)。但是,我无法看到如何使用非阻塞写实现正确的Proactor机制。也就是利用操作系统管理的非阻塞写函数。
这种功能由操作系统特定调用支持,例如win32下的GetQueuedCompletionStatus。
我确实看到Java 7为NIO带来了异步完成处理程序的更新(似乎朝着正确的方向)。话虽如此...鉴于缺乏统一跨平台支持(特别是异步写操作)的OS管理异步操作,我认为这是一种没有利用本地OS支持的拟实现。
所以我的问题是,Proactor基于IO处理在Java中是否有可能以一种对于特定情况有利的方式实现; 如果Java NIO支持基于Proactor的IO处理(无论是在Java 6还是Java 7中),操作系统管理的异步IO支持(即来自操作系统的完成回调)是否被利用?此外,如果实现纯粹在VM中,性能优势是否如此微小,以至于使用主动事件处理提供的仅仅是一种不同(可能更简单)的构建并发网络处理软件的方法。
对于任何对积极事件处理感兴趣的人,这里有一篇很好的文章,概述了优缺点以及与传统的每连接线程和反应器IO模型的比较。