Javascript NodeJS如何处理异步文件IO?

Javascript NodeJS如何处理异步文件IO?,javascript,node.js,file,asynchronous,io,Javascript,Node.js,File,Asynchronous,Io,使用NodeJS已经有一段时间了,我一直想知道node如何在内部处理文件操作 考虑以下伪代码: initialize http server on connection: modify_some_file: on success: print "it worked" 让我们考虑两个几乎同时访问页面的用户A& B。让我们进一步假设A是第一个连接的,然后发生以下情况: 连接 NodeJS初始化文件操作,并告诉操作系统一旦完成就会收到通知 我想知道

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

考虑以下伪代码:

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

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

  • 连接
  • NodeJS初始化文件操作,并告诉操作系统一旦完成就会收到通知
我想知道的是:比如说,文件操作还没有完成,B连接,node做什么?当文件仍处于“被修改”过程中时,它如何以及何时访问该文件

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

好了,节点不会在意的

至少在Unix上,将多个写入程序写入同一个文件是完全合法的。有时这不是问题(假设您的文件由固定大小的记录组成,其中writer#1写入记录X,writer#2写入记录Y,X!==Y),有时则是问题(相同的示例:当两个writer都要写入记录X时)

在Node中,由于I/O操作“轮流进行”,问题得到了缓解,但我认为仍然存在两个编写器相互妨碍的可能性。这取决于程序员,以确保不会发生这种情况


使用Node,您可以使用
*Sync()
版本的
fs
操作(但这些操作会在操作过程中阻止您的应用程序),使用append模式(我认为它只适用于某些写入大小,如果append确实有用,则取决于您的要求),使用某种形式的锁定,或者使用类似于队列的方法,在该队列中,写入操作将放在队列上,并且只有一个队列使用者来处理写入操作。

谢谢您的回答!因此,在修改共享数据时确实存在问题。我个人从未遇到过这个问题,但我从来没有真正确定过这一点。我想我记得有一次,有人试图从多个请求中编写JSON文件,结果JSON全是乱码:)