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