NioServerSocketChannelFactory

NioServerSocketChannelFactory

我有一个基于netty的应用程序,它监听多个TCP端口。所以每个端口都是这样初始化的

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

但是有这么多线程池(我有很多开放的TCP端口)对我来说是一种浪费。
问题是:在netty中跨多个服务器引导使用相同的线程池是否安全?(可能是一些线程本地通道引用等?)

最佳答案

最好先创建一个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);
....

关于java - 跨多个ServerBootstraps使用相同的线程池是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13624218/

10-10 11:53