2011-05-19 9 views
5

私はActiveMQブローカの設定に取り組んでいました。私が混乱させているのは、私が読んだことのすべては、NIOが "拡大縮小が必要な場合は良い選択"あなたがもっとスピードを必要とするのであれば、私の質問はなぜ「常にNIOを使う」と言わないのでしょうか?私が読んだのは利点ですが、おそらく使用しない理由があります(それ以外の場合はデフォルトになります)。彼らは何ですか?ActiveMQのNIOの欠点

答えて

3

複雑さ。通常、接続ごとに1つのスレッドをコーディングする方が簡単です。

また、NIOは小容量のケース(1,2,3接続)ではわずかに遅くなると思います。一般的に、小容量のケースでうまく動作するようにシステムを設計することはできませんが、アプリケーションの接続数が2を超えることは決してありません。おそらくNIOは過度の/実際には有害なものです。

3

NIO転送は、効率的で、接続ごとにスレッドを生成しないため、スケーラビリティが向上します。また、NIOトランスポートはTCPトランスポートを拡張するので、基本となるソケットのすべてのオプションも引き続き適用されます。私が知る限り、全体的にはTCP転送よりも効率的でなければならないため、NIOを使用することには欠点はありません。 NIOがデフォルトの転送ではないことを思い出すことができます。

+1

一般に、ソースあたり1つのスレッドのみが数千(またはおそらく数百)のスレッドに重大な悪影響を及ぼしますので、多くの典型的なケースでこの主な利点は無関係です。逆にI/Oをブロックすると、スレッドごとにスループットが少し高くなります。しかし、最も重要な欠点は、JDKでのNIOの実装には長年にわたり多くの問題があったことです(異なるプラットフォーム上のさまざまな問題)。 – StaxMan