0

Netty 3.7.0 を使用しており、ChannelPipeline の最初の要素として ExecutionHandler (OMATPE) を追加しています。

Q1 : このセットアップでは、WorkerPool のサイズを 1 に設定しても安全です。これは、ExecutionHandler によって提供される Executor に追加される ChannelDownstreamEventRunnable を作成するだけだからです。それとも、ここで何か不足していますか?

Q2 : パイプラインにはいくつかのデコーダーもあります。そのため、デコード作業は ExecutionHandler-Thread によって行われます。これはある種の「悪い習慣」ですか?つまり、ExecutionHandler-Threads ブロックはいつですか? しかし、その後、ExecutionHandler の Executor のキューが増加するだけで、接続は引き続き WorkerPool によって処理されます。

4

1 に答える 1

0

A1. はい、ワーカー プールのスレッドは着信接続を受け入れるだけで、プール内の 1 つのスレッドで十分なようです。A2. アプリケーションによって異なります。チャネルから読み取るだけであれば、Executor スレッドのブロックは安全であり、フロー制御として機能します。ただし、場合によっては、読み取り処理をブロックするとメッセージの送信がブロックされ、デッドロックが発生する可能性があります。したがって、一般的に、Netty には非同期の性質があるため、エグゼキューター スレッドをブロックすべきではありません (IMHO)。

于 2013-11-06T19:49:11.643 に答える