2

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

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

但是拥有这么多线程池(而且我有很多开放的 TCP 端口)对我来说似乎是一种浪费。

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

4

1 回答 1

1

您最好创建一个 WorkerPool,然后在不同的 NioServerSocketChannelFactory 实例之间共享它。因此,您可以将相同的 Workers 用于不同的 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 回答