NodeJS如何处理asynchronous文件IO?
在NodeJS上工作了一段时间,我一直在想如何在内部处理文件操作。
考虑到下面的伪代码:
initialize http server on connection: modify_some_file: on success: print "it worked"
让我们考虑几乎同时尝试访问该页面的两个用户A和B. 让我们进一步假设A是第一个连接,那么发生以下事情:
- A连接
- NodeJS初始化文件操作,并告诉操作系统完成后通知操作系统
这是我想知道的:假设文件操作还没有完成,B连接,节点做什么? 如何在什么时候访问文件,还在进行“被修改”?
我希望我的问题有些清楚;)期待你的答案!
AFAIK,Node不会在意。
至less在Unix上,将多个编写者放在同一个文件中是完全合法的。 有时候这不是问题(比如说你的文件由固定大小的logging组成,其中写入者#1写入loggingX,写入者#2写入loggingY,X!== Y),有时它是(同样的例子:当这两个作者都想写入来loggingX)。
在Node中,由于I / O操作“轮stream”,问题得到了缓解,但是我认为两个作者还是有潜力相互争夺。 程序员要确保不会发生。
使用Node,你可以使用fs
操作的*Sync()
版本(但是在操作过程中会阻塞你的应用程序),使用append模式(这只是primefaces,直到我认为的某些写入大小,这取决于你的要求如果追加实际上是有用的),可以使用某种forms的locking,或者使用类似队列的地方,将写入操作放入队列,并且有一个队列使用者来处理写入。