問題タブ [jeromq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
zeromq - ZeroMQ は驚くほど遅い
現在、いくつかの通信ミドルウェアのレイテンシ ベンチマークを行っているところ、ZeroMQREQ
とREP
ソケットが驚くほど遅いことがわかりました。たとえば、ZeroMQ は ZeroC Ice よりも高速であると予想していました。完全を期すために、これまでのテストの結果を次に示します。
- Ice 7600 メッセージ/秒
- ZeroMQ 4300 ~ 4500 メッセージ/秒
メッセージは、データ構造をパラメータとして持つリモート呼び出しです。データ構造には、基本型 (int、float、double、boolean、string) のフィールドが含まれています。最初は、Protocol Buffers を使用したデータのシリアル化が ZeroMQ のボトルネックになる可能性があるのではないかと疑っていましたが、空のメッセージを使用してテストしたところ、結果はかなり似ていました。ZeroMQ が空のメッセージを送信している場合でも、Ice の方が高速です。
それでも私は、ZeroMQ に公平なチャンスを与えたいと思っています。その精神で、何らかの方法でREQ
andの速度を改善できるかどうかを知りたい. REP
多分私は他のソケットを使用する必要がありますか?唯一の制限は、通信が RPC に似ている必要があることです。クライアントは、メッセージの結果を期待している間は何もしないでください。
これが私の実装のコードです。ベンチマークの Java バージョンを提供しますが、結果は Python (少し遅い) と C++ (少し速い) でかなり似ています。
クライアント
サーバ
コードの残りの部分は、基本的に平均レイテンシと 1 秒あたりのメッセージ数を計算するためのものです。
たぶん、ZeroMQ はこの通信パターンでは遅いだけで、多対多の通信パターンに優れています...
注: 結果を記録する前に、両方のミドルウェアを「ウォーミング」しました。それにもかかわらず、ZeroMQ は常に Ice よりも低速です。
EDIT1 : 温暖化の反復回数を 10000 に増やしました。新しい結果は次のとおりです。
- Ice 1 秒あたり 8100 メッセージ (さらに温暖化すると 8250 に収束)
- ZeroMQ + Protocol Buffersは、1 秒あたり 4650 メッセージに収束します