我在一个系统上工作,每个请求和参数都记录在一个csv文件中。
在写入文件时,我使用lock
进行同步。
node.js中的同步如何工作?
如果我想将请求记录到文件中,让我们说基于时间的csv文件,我是否需要锁定它?
答案 0 :(得分:4)
好的,所以我花了一段时间阅读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写入(它将保留一个内部缓冲区,其中尚未写入数据)。这将保证数据按照您写入流的顺序精确写入。