使用 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/