4

このコードを実行している 1 つのボックスに 4 つ、8 つ、またはそれ以上のスレッドとクラスターがある場合、ログ ファイル/ファイル ライターでリソースの競合が発生する可能性はありますか? もしそうなら、あなたは説明する例を投稿できますか? これまでに行ったすべてのテストでは、書き込みデータが絡み合ったり破棄されたりしないことが示されているようですが、100% 確信しているわけではありません。

ありがとう!

var errLog = fs.createWriteStream(... + '/error.log');
GLOBAL.dbLog = fs.createWriteStream(... + '/db.log');
4

1 に答える 1

4

スレッドまたはクラスター化されたプロセスの調整がないため、問題は、OS がファイルへの複数のオープン書き込みストリームを許可するかどうかにかかっています。CreateWriteStream のデフォルトの C フラグはO_WRONLY || O_CREAT || O_TRUNC. これは最初の問題を示しています - すべてのプロセスが新しい切り詰められたファイルを作成します (おそらく追加が必要な場合)。

したがってw+、ストリームを作成するときにフラグとして指定していると仮定すると...

Linux の場合、この関連する質問は、バイト数が PIPE_BUF バイト (Linux では 4096、他の Unix では 512) 未満であれば問題ないことを示しています。

Windowsでの答えはわかりません。

于 2012-04-24T19:39:20.647 に答える