2011-05-19 28 views
5

我一直在努力配置一個ActiveMQ代理,而讓我困惑的一件事是我讀過的所有內容都將NIO描述爲「如果您需要擴展的一個好選擇」或者「如果你需要更多的速度「,所以我的問題是爲什麼他們不說」總是使用NIO「?我讀過的所有內容都很有優勢,但可能有理由不使用它(否則它只是默認設置)。他們是什麼?ActiveMQ中的NIO缺點

回答

3

複雜性。爲每個連接編寫1個線程通常更簡單。

另外,我認爲NIO可能會在小容量的情況下稍微慢一點(1,2,3連接)。一般來說,你不會設計一個系統在小容量的情況下表現良好......但如果你知道你永遠不會有一個應用程序> 2連接...也許NIO是過度殺/實際上是有害的。

3

NIO傳輸比較好,因爲它效率更高,並且不會爲每個連接產生一個線程。另外,NIO傳輸擴展了TCP傳輸,所以底層套接字的所有選項仍然適用。據我所知,使用NIO沒有任何缺點,因爲總體而言,它應該比TCP傳輸更有效率。沒有什麼好的理由讓我記得NIO不是默認的交通工具。

+1

但是,一般來說,每個源代碼的單線程只會對成千上萬個線程(或者可能是幾百個線程)產生嚴重的負面影響,所以在許多典型情況下,這個主要好處是無關緊要的。相反,阻塞I/O通常每個線程的吞吐量都有所提高。但是最重​​要的缺點是,JDK的NIO實現多年來都存在很多問題(以及不同平臺上的不同問題)。 – StaxMan 2011-05-27 22:30:33