我在一个系统上工作,每个请求和参数都记录到一个 csv 文件中。
在写入文件时,我正在使用 alock
进行同步。
同步在 node.js 中是如何工作的?
如果我想将请求记录到文件中,比如说基于时间的 csv 文件,我需要锁定它吗?
我在一个系统上工作,每个请求和参数都记录到一个 csv 文件中。
在写入文件时,我正在使用 alock
进行同步。
同步在 node.js 中是如何工作的?
如果我想将请求记录到文件中,比如说基于时间的 csv 文件,我需要锁定它吗?
好的,所以我花了一些时间阅读 node.js 源代码。如果你使用类似的东西fs.appendFile
,你最终会在这里(在 C++ 中):
if (cb->IsFunction()) {
ASYNC_CALL(write, cb, fd, buf, len, pos)
return;
}
https://github.com/joyent/node/blob/master/src/node_file.cc#L681
write
是普通的旧 POSIC 写法,不能保证是原子的(相对于pwrite
)。不会发生任何可怕的事情,但是如果您appendFile
在上一次呼叫完成之前再次呼叫,线路可能会混淆。
您应该使用fs.createWriteStream
,它将进行顺序 POSIX 写入(它将保留一个内部缓冲区,其中包含尚未写入的数据)。这将保证数据按照您写入流的顺序精确写入。