4

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

考虑以下伪代码:

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

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

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

这就是我想知道的:假设文件操作尚未完成并且B连接,节点做什么?当文件仍处于“被修改”过程中时,它如何以及何时访问文件?

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

4

1 回答 1

3

AFAIK,Node 不在乎。

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

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

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

于 2013-06-02T10:41:46.863 回答