2013-06-02 244 views
4

在NodeJS工作了一段时间后,我一直在想如何在内部处理文件操作。NodeJS如何处理异步文件IO?

考虑以下伪代码:

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

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

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

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

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

回答

3

AFAIK,Node不会在意。

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

在节点中,由于I/O操作“轮流”,问题得到缓解,但我认为两个编写者仍有潜力以其他方式进入。这取决于程序员确保不会发生。

与节点,你可以使用*Sync()版本fs操作(但那些在操作过程中阻止您的应用程序),使用追加模式(这是只有原子达到一定写大小,我认为,这取决于你的如果追加实际上是有用的),使用某种形式的锁定,或者使用类似队列的地方,写入操作将被放入队列中,并且有一个队列消费者来处理写入。

+0

感谢您的回答! 因此,修改共享数据确实存在问题。 我从来没有遇到过这个问题,但这是我从来没有真正确定的。 –

+0

我想我记得有人曾经试图从多个请求中编写一个JSON文件,而JSON出来都是乱码:) – robertklep