だからここで私は私のお気に入りのソフトウェアパターンブックの1つ(パターン指向のソフトウェアアーキテクチャ-同時およびネットワークオブジェクトのパターン)、特にProactor/Reactor非同期IOパターンのセクションを読んでいます。選択可能なチャネルを使用することで、Reactorスタイルの非同期IOメカニズムを非常に簡単に実装できることがわかります(そしてそうしました)。しかし、ノンブロッキング書き込みで適切なProactorメカニズムを実装する方法がわかりません。これは、OSが管理するノンブロッキング書き込み機能を利用しています。
win32でのGetQueuedCompletionStatusなどのOS固有の呼び出しでサポートされる機能。
私は、Java 7が非同期完了ハンドラー(正しい方向にあるように見える)を使用してNIOにいくつかの更新をもたらすことを確認しました。そうは言っても...OS管理の非同期操作(特に非同期書き込み)の統合されたクロスプラットフォームサポートがないことを考えると、これはネイティブOSサポートを利用していない準実装であると思います。
だから私の質問は、特定のシナリオに使用するのが有利であるような方法で、JavaでプロアクターベースのIO処理が可能かどうかです。また、Java NIOがプロアクターベースのIO処理(Java6またはJava7のいずれか)をサポートしている場合、OS管理の非同期IOサポート(つまり、OSからの完了コールバック)が利用されていますか?さらに、実装が純粋にVM内にある場合、パフォーマンス上の利点はほとんどないため、プロアクティブなイベント処理を使用しても、同時ネットワーク処理ソフトウェアを構築するための異なる(おそらくより単純な)方法にすぎません。
ここでのプロアクティブなイベント処理に関心のある人には、長所/短所の概要と、従来の接続ごとのスレッドモデルとリアクティブIOモデルの両方との比較について説明した優れた記事があります。