NodeJS如何处理异步文件IO?

时间:2013-06-02 09:55:13

标签: javascript node.js file asynchronous io

现在已经使用NodeJS一段时间了,我一直想知道节点如何在内部处理文件操作。

考虑以下伪代码:

initialize http server
on connection:
    modify_some_file:
        on success:
            print "it worked"

让我们考虑两个用户A& B几乎同时尝试访问该页面。让我们进一步假设A是第一个连接,然后发生以下情况:

  • A连接
  • NodeJS初始化文件操作,并告知操作系统完成后通知

这就是我想知道的:让我们说,文件操作还没有完成,B连接,节点做什么?当它仍处于“被修改”的过程中时,它如何以及何时访问该文件?

我希望我的问题有点清楚;) 期待您的回答!

1 个答案:

答案 0 :(得分:3)

AFAIK,Node不关心。

至少在Unix上,将多个编写器放在同一个文件中是完全合法的。有时这不是问题(假设你的文件由固定大小的记录组成,其中写入者#1写入记录X而写入者#2写入记录Y,X!== Y),有时它是(相同的例子:当两位作家都想写录制X)。

在Node中,问题得到缓解,因为I / O操作“轮流”,但我认为两个编写者仍然有可能互相攻击。程序员应该确保不会发生这种情况。

使用Node,您可以使用*Sync()操作的fs版本(但这些将在操作期间阻止您的应用),使用追加模式(这只是某些写入大小的原子模型我想想,如果附加实际上有用,则取决于你的要求),使用某种形式的锁定,或使用类似队列的东西,其中写入操作将被放入队列,并且有一个队列消费者来处理写入。