2011-05-19 20 views
5

Pracowałem nad konfiguracją brokera ActiveMQ, a jedną z rzeczy, która mnie myli, jest to, że wszystko, co przeczytałem, opisuje NIO jako "dobry wybór, jeśli trzeba skalować" lub "coś do zobaczenia". jeśli potrzebujesz większej prędkości ", więc moje pytanie brzmi: dlaczego po prostu nie mówią" zawsze korzystasz z NIO "? Wszystko, co przeczytałem, to zalety, ale prawdopodobnie istnieją powody, aby tego nie używać (w przeciwnym razie byłby to po prostu domyślny). Czym oni są?Wady NIO w ActiveMQ

Odpowiedz

3

Złożoność. Zazwyczaj prostsze jest kodowanie dla 1 wątku na połączenie.

Ponadto, myślę, że NIO może być nieco wolniejszy w przypadku małej objętości (1, 2, 3 połączenia). Generalnie nie zaprojektowałbyś systemu, który by dobrze działał w przypadku małej objętości, ale jeśli wiesz, że nigdy nie będziesz mieć> 2 połączeń dla aplikacji ... może NIO jest przesadzone/w rzeczywistości szkodliwe.

3

Transport NIO skaluje się lepiej, ponieważ jest bardziej wydajny i nie odradza się wątku na połączenie. Ponadto transport NIO rozszerza transport TCP, więc wszystkie opcje dla podstawowego gniazda nadal mają zastosowanie. Z mojej wiedzy wynika, że ​​korzystanie z NIO nie stanowi wady, ponieważ ogólnie powinno być bardziej wydajne niż transport TCP. Nie ma żadnego powodu, dla którego mógłbym sobie przypomnieć, że NIO nie jest domyślnym transportem.

+1

Generalnie jednak jeden wątek na każde źródło ma znaczący negatywny wpływ na tysiące (lub może setki) wątków, więc w wielu typowych przypadkach ta główna korzyść jest nieistotna. I odwrotnie blokowanie I/O zazwyczaj ma nieco większą przepustowość na wątek. Ale najważniejszym minusem było to, że implementacje NIO w JDK miały przez lata wiele problemów (i różne problemy na różnych platformach). – StaxMan