新しいLoggerコンポーネント(.NET 3.5、C#)を設計しています。ロックフリーキューを実装する(Loggerコンポーネント用)
ロックフリーの実装を使用したいと思います。
単一のスレッドのみがファイル/その他の記憶媒体に実際の出力を行いますが、ロギングイベントは(潜在的に)複数のスレッドから送信されます。
本質的に、すべての作者は、他のプロセス(LogFileWriter)によって取得されるように、それらのデータをいくつかのキューにエンキューする*です。
これはロックレスの方法で実現できますか?ネット上のこの特定の問題を直接参照することはできませんでした。
と思われます。ほとんどのロギング・アクティビティーでは、片方のログの断続的な供給と、他方のロギング・ディスクの遅いディスクがあります。ロックされたカーネル管理のキューは、そのような機能にとって最も効率的です。あなたのアプリケーションでロックレスキューが望ましい特別な理由はありますか? –
ほとんどのロガーは、たとえ使用できなくてもロックを使用しているかどうかはわかりません。私の要求は高性能であり、これはできるだけ早くロガーを呼び出すスレッドを解放することを意味します。このシナリオでは、ロックを取得することは無駄に思われます。 –
私はHansに同意します。 http://logging.apache.org/log4net/は自家製システムよりも高速である可能性が高く、適切に動作するためには開発やデバッグに要する時間が少なくて済みます。 –