2012-11-29 66 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

相關問題