Java Non-Blocking and Asynchronous IO with NIO & NIO.2 (JSR203) - Reactor/Proactor Implementations
所以在这里,我正在阅读我最喜欢的软件模式书籍之一(面向模式的软件架构 - 并发和网络对象的模式),特别是关于Proactor/Reactor异步IO模式的部分。我可以看到如何使用可选通道,我可以非常轻松地实现反应堆式异步IO机制(并且已经这样做了)。但是,我看不出如何实现具有非阻塞写入的正确Proactor机制。这是利用操作系统管理的非阻塞写入功能。
操作系统特定调用支持的功能,如 win32 下的 GetQueuedCompletionStatus。
我确实看到Java 7通过异步完成处理程序为NIO带来了一些更新(这似乎是朝着正确的方向)。话虽如此...鉴于缺乏对操作系统托管异步操作(特别是异步写入)的统一跨平台支持,我假设这是一个不利用本机操作系统支持的准实现。
所以我的问题是,在Java中,基于proactor的IO处理是否可能以这样一种方式用于特定场景是有利的;而且,如果 Java NIO 确实支持基于 proactor 的 IO 处理(在 Java 6 或 Java 7 中),是否正在利用操作系统托管的异步 IO 支持(即来自操作系统的完成回调)?此外,如果实现纯粹在 VM 中实现,则性能优势非常小,以至于使用主动事件处理只能提供一种不同的(可能更简单的)方法来构造并发网络处理软件。
对于任何对主动事件处理感兴趣的人,这里都是一篇很好的文章,概述了优点/缺点,并与传统的每个连接线程和反应式IO模型进行了比较。