2

複数のtcpポートをリッスンするnettyベースのアプリケーションがあります。したがって、各ポートは次のように初期化されます

bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(
            Executors.newCachedThreadPool(), Executors.newFixedThreadPool(Settings.getDemuxPoolSize()),
            Settings.getDemuxPoolSize()));

しかし、非常に多くのスレッドプールがある(そして私は本当に多くの開いているTCPポートを持っている)ことは私には無駄のように見えます。

質問は次のとおりです。Nettyの複数のサーバーブートストラップで同じスレッドプールを使用するのは安全ですか?(多分いくつかのスレッドローカルチャネル参照など?)

4

1 に答える 1

1

WorkerPoolを作成してから、異なるNioServerSocketChannelFactoryインスタンス間で共有することをお勧めします。したがって、異なるChannelFactoryインスタンスに同じワーカーを使用できます。

何かのようなもの:

WorkerPool<NioWorker> workerPool = new NioWorkerPool<NioWorker>(Executors.newCachedThreadPool(), size);
NioServerSocketChannelFactory factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), workerPool);
NioServerSocketChannelFactory factory2 = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), workerPool);
....
于 2012-11-29T19:33:47.310 に答える