0

我在一个系统上工作,每个请求和参数都记录到一个 csv 文件中。

在写入文件时,我正在使用 alock进行同步。

同步在 node.js 中是如何工作的?

如果我想将请求记录到文件中,比如说基于时间的 csv 文件,我需要锁定它吗?

4

1 回答 1

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 写入(它将保留一个内部缓冲区,其中包含尚未写入的数据)。这将保证数据按照您写入流的顺序精确写入。

于 2013-09-24T10:18:52.140 回答