现在已经使用NodeJS一段时间了,我一直想知道节点如何在内部处理文件操作。
考虑以下伪代码:
initialize http server
on connection:
modify_some_file:
on success:
print "it worked"
让我们考虑两个用户A& B几乎同时尝试访问该页面。让我们进一步假设A是第一个连接,然后发生以下情况:
这就是我想知道的:让我们说,文件操作还没有完成,B连接,节点做什么?当它仍处于“被修改”的过程中时,它如何以及何时访问该文件?
我希望我的问题有点清楚;) 期待您的回答!
答案 0 :(得分:3)
AFAIK,Node不关心。
至少在Unix上,将多个编写器放在同一个文件中是完全合法的。有时这不是问题(假设你的文件由固定大小的记录组成,其中写入者#1写入记录X而写入者#2写入记录Y,X!== Y),有时它是(相同的例子:当两位作家都想写录制X)。
在Node中,问题得到缓解,因为I / O操作“轮流”,但我认为两个编写者仍然有可能互相攻击。程序员应该确保不会发生这种情况。
使用Node,您可以使用*Sync()
操作的fs
版本(但这些将在操作期间阻止您的应用),使用追加模式(这只是某些写入大小的原子模型我想想,如果附加实际上有用,则取决于你的要求),使用某种形式的锁定,或使用类似队列的东西,其中写入操作将被放入队列,并且有一个队列消费者来处理写入。