NodeJS如何处理异步文件IO

How does NodeJS handle async file IO?

本文关键字:异步 文件 IO 处理 何处理 NodeJS      更新时间:2023-09-26

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

考虑以下伪代码:

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

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

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

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

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

哎呀,Node不会在意的。

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

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

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