2012-08-15 78 views
-2

爲什麼創建新的引導程序必須看起來很尷尬?應該有比平常更容易的方法來做到這一點創建引導程序

serverBootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(
    Executors.newCachedThreadPool(), 
    Executors.newCachedThreadPool())); 

它看起來的方式是絕對可怕的。比如,爲什麼我必須調用newCachedThreadPool()兩次?

回答

0

在Netty的最新版本中,可以使用默認的NioServerSocketChannelFactory構造函數,它使用兩個緩存的線程池,就像您當前正在執行的那樣。然後,自舉實例是這樣的,這是冗長的要少得多:

ServerBootstrap sb = new ServerBootstrap(new NioServerSocketChannelFactory()); 

請研究用於什麼這些線程池,但是。在某些情況下(如slow loris attacks),此設置不能很好地運行,而會導致Java進程耗盡堆空間。出於這個原因,您可能需要查看Netty提供的MemoryAwareThreadPoolExecutor類。

緩存線程池本質上是邪惡的,因爲它們有一個點,他們達到「臨界質量」。當存在非常高的線程數時,由於上下文切換的開銷而導致性能下降。由於線程數量導致性能下降,線程池工作人員更慢地完成任務。由於這些工作人員忙於較長時間,因此緩存線程池必須繼續創建新線程以處理持續的工作負載。隨着創建更多的線程,性能會繼續降低事件的數量。這個問題有助於自身,而你的服務器本質上是爆炸性的。玩的開心!