0

memoryawarethreadpoolexecutor のドキュメントで

http://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/execution/MemoryAwareThreadPoolExecutor.html

イベントの実行順序の下で、彼は次のように述べています

スレッド X: --- チャネル A (イベント 2) --- チャネル A (イベント 1) --------------------------->

スレッド Y: --- チャネル A (イベント 3) --- チャネル B (イベント 2) --- チャネル B (イベント 3) --->

スレッド Z: --- チャンネル B (イベント 1) --- チャンネル B (イベント 4) --- チャンネル A (イベント 4) --->

Channel A ( Event 1 , Event 2 ) 、 Channel A (Event 3) を2つのスレッド X 、 Y で処理するにはどうすればよいですか。

私の理解によると、単一の netty ワーカー スレッドは多くのクライアントに対して処理を実行できますが、クライアントの場合、すべてのイベント (1、2 3) は同じワーカー スレッドで処理する必要があります。どのように変更できますか。

4

2 に答える 2

1

この場合、イベントは Netty ワーカー スレッドのプールによって処理されなくなることに注意してください。イベントはスレッドの別のプールに渡され、同じチャネルであってもタスクがいつ実行されるかは保証されません。チャネル A は、スレッド X に割り当てられたイベント 1 を引き渡すことができます。イベント 1 はプリエンプトされます。次に、チャネル A はイベント 2 を引き渡します。イベント 2 は、スレッド Y によってすぐに実行されます。その後、スレッド X が再び開始され、イベント 1 を実行します。

ただし、グラフ内のスレッド X のタイムラインが奇妙であることに同意します。これは、内部キューから順番にタスクを自然に選択するためです。しかし、私の推測では、ThreadPoolExecutor 内でキューに入れられたタスクの順序については保証できません。キューは通常 FIFO ですが、そうである必要はありません。

于 2012-05-15T21:46:08.603 に答える
0

まさに.. ExecutorHandler が使用されるとすぐに、同じ「チャネルごとのスレッド」が当てはまらなくなる可能性があります。

于 2012-05-16T07:24:26.220 に答える