6

私はJavaコードをNIOを使用するように変換している最中ですが、それを設計するための最良の方法がわかりません。

私の最初のアプローチは、セレクタースレッドのプールを作成することでした。スレッドは必要に応じて開始/強制終了され、チャネルはラウンドロビン方式で接続/受け入れられるとセレクタースレッドに登録されます。そこから、各スレッドはselect()でブロックし、ウェイクアップすると、選択されたキーを持つ各チャネルに関連付けられた適切なコールバックを実行します。

この「複数のセレクタースレッド」の設計に加えて、単一のセレクタースレッドとディスパッチスレッドのプールを使用すると言われることもあります。IO操作を実行する準備ができると、セレクターはディスパッチャースレッドに通知し、ディスパッチャースレッドはリクエストを処理します。このモデルには、IOスレッドをブロックしないという利点がありますが、現在、すべてのIOを単一のスレッドに強制し、ディスパッチャーで同期/イベントキューを処理しています。

さらに、各チャネルを読み取るために単一の直接バイトバッファを使用して、それをコールバックに直接渡すことはできません。代わりに、読み取りが発生するたびにデータを配列にコピーしてリセットする必要があります。(おもう..)

これを実装するための最良の方法は何ですか?

4

3 に答える 3

4

ReactorPatternを見てください

http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf

セレクターをどのように機能させるかは、実際にはユースケースによって異なります。(接続数、メッセージサイズなど)

IOからNIOに変換することで解決しようとしている問題は何ですか?

于 2009-09-21T16:01:26.027 に答える
3

あなたは本当にミナを調べる必要があります、

http://mina.apache.org/

それはあなたが言及したすべての問題を解決します。

于 2009-09-21T15:49:56.973 に答える
1

また、非常に高速で機能が豊富で、大規模なシステムやRedhat(jboss)、Twitter、Facebookなどの大企業で使用されているnettyもご覧ください。

于 2012-02-21T09:47:11.450 に答える