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