この種の推奨事項は、次のような複数の場所で見ました。
複数のファクトリ: 同じファクトリによって作成されたすべてのクライアント (受信者に加えて送信者) は、1 つの TCP 接続を共有します。最大メッセージ スループットは、この TCP 接続を通過できる操作の数によって制限されます。1 つのファクトリで得られるスループットは、TCP の往復時間とメッセージ サイズによって大きく異なります。より高いスループット レートを得るには、複数のメッセージング ファクトリを使用する必要があります。
Redis、RabbitMQ などについても同様の推奨事項を見つけることができます。私の質問は、1 つの TCP チャネルがどのように使い果たされるのでしょうか? 単一の TCP チャネルに帯域幅の制限はないと思います。
では、なぜ人々は高スループットのために複数のチャネルを持つことを提案するのでしょうか? それは次の理由によるものですか。
クライアント アプリケーションが多数の小さなメッセージを 1 つの tcp チャネルに送信する場合、各操作は tcp ソケットをロックしてからメッセージを送信します。ロック競合が発生する可能性があります。そして、複数の tcp チャネルを使用する場合、この競合はある程度解決される可能性があります。
大きなメッセージが tcp チャネルで送信される場合、シリアライズ/デシリアライズしてチャネルにプッシュするのに時間がかかることがあります。他の小さなメッセージをブロックできます。
これらは実際の理由ですか (または、これらの仮定が間違っている場合、本当の理由は何ですか)?