javascript - NodeJS 如何处理异步文件 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 是第一个连接的,然后会发生以下情况:

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

这就是我想知道的:比方说,文件操作尚未完成并且 B 连接, Node 做什么?当文件还在“被修改”的过程中,它如何以及何时访问文件?

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

最佳答案

据我所知,Node 不会关心。

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

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

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

关于javascript - NodeJS 如何处理异步文件 IO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16881662/

相关文章:

javascript - MyEclipse 在 JSP 中禁用 javascript 验证

node.js - 使用 Node.js 和 MSMQ 的最佳方式是什么?

xcode - 如何在 Mac 上使用 node-gyp 生成 XCode 项目

javascript - 为什么我的 node.js express 代码不调用 console.log()?

file - NetLogo:输出文件中的换行符??没那么简单。

javascript - 将静态标签添加到传单中的圆形标记

javascript - foreach 只产生一个结果

c# - Ajax 内容类型 Unicode 问题

c - 如何在 C 中将整个函数输出打印到文件中

c++ - 读取 Unicode 文件