2012-11-29 71 views
2

我有一个基于netty的应用程序,它侦听多个tcp端口。因此,每个端口初始化这样跨多个ServerBootstraps使用相同的线程池是否安全?

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

但有这么多的线程池(和我还真不少开放TCP端口)看起来像一个垃圾给我。

问题是:在Netty的多个服务器引导程序中使用SAME线程池安全吗? (也许一些线程本地通道引用等?)

回答

1

你最好不要创建一个WorkerPool,然后在不同的NioServerSocketChannelFactory实例之间共享它。所以你可以为不同的ChannelFactory实例使用相同的Worker。

喜欢的东西:

WorkerPool<NioWorker> workerPool = new NioWorkerPool<NioWorker>(Executors.newCachedThreadPool(), size); 
NioServerSocketChannelFactory factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), workerPool); 
NioServerSocketChannelFactory factory2 = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), workerPool); 
.... 
+1

我想你是对的。但请你澄清一下有什么区别?因为来自netty.io的官方用户指南建议使用CachedThreadPools并且根本不提NioWorkerPools? – Deinlandel

相关问题