Reactor Pattern
を適用したJava NIOを使用した単純なサーバークライアントアプリケーションを作成しています。私の理解のために、(例:OP_ACCEPT、OP_READ、OP_WRITE)を収集するのはReactor
クラスです。個別のスレッドでイベントハンドラをディスパッチする
相対的なEventHandler
は特定のタスクを担当するので、ハンドラは別々のスレッドで非同期に実行する必要があります。ここ
私はこれを実行すると、それはいくつかの問題を示し、whileループを実行し続けるには、とSelector
は(1,4,16)のセットreadyOpsを返し続けます。私はそれがAcceptHanndler
がブロック方法でOP_ACCEPT
を処理しなかったためだと思うので、イテレータでキーが削除された場合は、select()
の後に再び表示されます。だから私はイベントを取るべきではありません。
edge-triggered
とlevel-triggered
モデルのコンセプトが私の心に浮かんでいます...セレクターはlevel-triggered
モデルで稼働していますか?
セレクタの全ポイントは別のスレッドを使用する必要はありません。 – EJP
Selectorのポイントは、1つのスレッドで複数のソケットを管理することです。クライアントごとにスレッドを使用しませんでした。 – JasonHuang
あなたはそれよりはるかに悪いです。基本的にセレクタイベント*ごとにスレッド*を使用しています。現在のスレッドでハンドラーを実行し、データベースアクセス、* after *の処理を完了した長時間実行するイベント、またはイベントが現在のスレッド内のどこにあっても補助スレッドを使用する必要があります。あなたの基本的なモデルは壊れています.. – EJP