サウンド処理マルチスレッドアプリでイベントを追跡したい。特定の状況でのみ発生するバグがあります。
従来のロギング(Eclipseによってインターセプトされたコンソールへのslf4jおよびlog4j)を使用しようとすると、ロギングコマンドによってミリ秒レベルの遅延が発生し、すべてが異なるため、バグがなくなります。
ロギングを高速化(数百回または数千回)する方法、または他の方法でログを記録する方法は?
アップデート
現在、ファイルアペンダーでログバックを使用していますが、まだ十分です。
サウンド処理マルチスレッドアプリでイベントを追跡したい。特定の状況でのみ発生するバグがあります。
従来のロギング(Eclipseによってインターセプトされたコンソールへのslf4jおよびlog4j)を使用しようとすると、ロギングコマンドによってミリ秒レベルの遅延が発生し、すべてが異なるため、バグがなくなります。
ロギングを高速化(数百回または数千回)する方法、または他の方法でログを記録する方法は?
アップデート
現在、ファイルアペンダーでログバックを使用していますが、まだ十分です。
答えは簡単です。Eclipseコンソールに何も出力しないでください。ファイルにのみ書き込み、すべてが完了したらファイルを表示します。Log4j自体は非常にパフォーマンスが高いです。
ファイルへのテキストの書き込みは十分に速いので、それから始めます。
サブマイクロ秒のテキストまたはバイナリロギングが必要な場合は、私が書いたJavaChronicleを使用できます。
ナノ秒レベルに移行する場合は、非同期にする必要があります。つまり、ディスクI/Oは別のスレッドによって実行されます。ロックフリーキュー(つまり、 Disruptor、CoralQueueなど)は、GCのガベージを生成することなく、スレッド間のパイプライン化を非常に効率的に提供します。
非常に高速な(〜100 nanos / msg)ロガーについては、CoralLogを確認できます。
非常に高速な(〜70 nanos / msg)読み取り/書き込みストアについては、CoralStoreを確認できます。
免責事項:私はCoralQueue、CoralLog、CoralStoreの開発者の1人です。