3

QuickfixJ の処理速度に問題があります。この質問で、1 秒あたり 300 件のメッセージを処理できることを読みました。私はまた、数千単位で報告された数を見ました。私の Quickfix セッション コードは、メッセージのリストを受信し、Sesssion.SendToTarget(); を介して 1 つずつ送信します。

メッセージを送信するループが遅くなる可能性がありますが、メッセージのリストを送信する方法や、これらのメッセージを送信するプロセスを高速化する方法があるのではないかと考えていました。画面にログインしているため、速度が低下している可能性もあります。ヘッドレスで実行し、ファイル ログだけに記録するメリットはありますか?

4

3 に答える 3

4

私は、QuickFIX/J が 1 秒あたり数千のメッセージを処理するのを見てきました。ただし、1 回の FIX セッションでそのパフォーマンスを得るには問題があります。私が説明しているシナリオには、複数のセッションが含まれていました。これが重要な理由は、FIX シーケンス番号が原因で、FIX プロトコルがセッションごとに本質的に連続的であるためです。これは事実上、セッションが 1 つある場合、メッセージを処理するスレッドが 1 つあることを意味します。複数のセッションを使用すると、エンジンは複数のスレッドとプロセッサを利用できます。

一般的に言えば、ファイル I/O が主要なオーバーヘッドです。ファイル システムへのアクセスを最適化する方法を探します。ロギングなしで MemoryStore を使用してエンジンを実行すると、非常に高速であることがわかります。極端に低遅延のアプリケーションには使用しませんが、悪くはありません。

于 2011-12-03T12:08:03.977 に答える
1

画面にログインすると、非常に遅くなります。画面にログオンすると、1秒あたり30〜40のメッセージが作成され、ロギングなしで400を超えるメッセージが作成されました。画面に何も表示しないでください。また、プロセスの遅い部分は、アクセプターからの回答です。イニシエーターは 1 秒あたり 2000 を超えるメッセージを送信できますが、アクセプターの応答によってプロセス全体が遅くなります。

于 2012-02-10T14:54:53.613 に答える
0

オーバーヘッドになる可能性があるため、ループ内の各メッセージを作成していますか? これは非同期的に行うことができ、メッセージは完了すると送信されます。送信時間を最小限に抑えたい場合は、非同期でログを記録すると、追加のオーバーヘッドが取り除かれます。ログが書き込まれたときに正確になるように、ログ スレッドに任意の時間データを送信するようにしてください。

于 2011-11-15T11:56:48.893 に答える