2

これは、実際にはクライアントの一般的な使用に関連している可能性がありますBootstrap-- 明らかに、グループはどのクライアントにも必要です。

しかし、単一の JVM で複数のクライアントを実行している場合、EventLoopGroupfor each を作成するために大量のメモリを消費し、非常に簡単に自分で OOM を実行できます。

JVM 内のすべてのクライアント間で共有されるグローバルEventLoopGroupを使用し、参照カウントを使用してクリーンに開始および破棄されるようにすることで、これを回避できましたが、これは意図した設計よりも回避策のように思えます。

EventLoopGroupまた、クライアントの呼び出しをシリアルに実行する、シングルスレッドのエグゼキューターを使用する実装はないようです。これは、Netty の非同期の性質と多少矛盾していることに気づきましたが、正当な使用例です。

4

1 に答える 1

5

EventLoopGroup複数のクライアント チャネル間で共有することを目的としています。EventLoopGroup作成するチャネルごとに新しいチャネルを作成する必要はありません。

のライフサイクルに参照カウントを導入しなければならなかった理由はわかりませんがEventLoopGroup、アプリケーションが終了しようとしているときにシャットダウンすることができます。または、デーモン スレッドを作成する を指定するThreadFactoryと、JVM は によって作成されたスレッドを待たずに終了しEventLoopGroupます。Netty は、実際にDefaultThreadFactoryデーモン スレッドを作成するのに便利なものを提供します。

EventLoopGroupシングルスレッド化するには、コンストラクターのパラメーターとして指定するだけです1

于 2013-08-23T07:10:59.667 に答える