4

如果我在一个运行此代码的机器上有 4、8 或更多线程和集群,是否会存在日志文件/文件编写器的资源争用?如果是这样,你能发布一个说明的例子吗?到目前为止,我所做的所有测试似乎都表明写入数据不会交织在一起,也不会被丢弃,但我并不是 100% 相信

谢谢!

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

1 回答 1

4

没有线程或集群进程的协调,所以问题归结为操作系统是否允许多个打开的写入流到一个文件。CreateWriteStream 的默认 C 标志是O_WRONLY || O_CREAT || O_TRUNC. 这表明第一个问题 - 所有进程都将创建一个新的截断文件(当您可能想要追加时)。

因此,假设您w+在创建流时指定为标志...

对于 Linux,这个相关问题表明只要字节数小于 PIPE_BUF 字节(Linux 上为 4096,其他一些 Unix 上为 512),您就可以了。

我不确定 Windows 上的答案是什么。

于 2012-04-24T19:39:20.647 回答