2013-06-02 118 views
4

在NodeJS工作了一段時間後,我一直在想如何在內部處理文件操作。NodeJS如何處理異步文件IO?

考慮以下僞代碼:

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

讓我們考慮的兩個用戶的& B中試圖幾乎同時訪問該頁面。讓我們進一步假設A是第一個連接,然後會發生以下情況:

  • A連接
  • 的NodeJS初始化文件操作,並告訴操作系統一旦完成通知

這就是我想知道的:假設文件操作還沒有完成,B連接,節點做了什麼?它在何時以及何時訪問該文件仍處於「被修改」的過程中?

我希望我的問題有點清楚;) 期待您的答案!

回答

3

AFAIK,Node不會在意。

至少在Unix上,擁有多個作者到同一個文件是完全合法的。有時候這不是問題(說你的文件由固定大小的記錄組成,其中作家#1寫入記錄X,寫入者#2寫入記錄Y,用X!== Y),有時它是(相同的例子:當這兩位作家都想寫信來記錄X)。

在節點中,由於I/O操作「輪流」,問題得到緩解,但我認爲兩個編寫者仍有潛力以其他方式進入。這取決於程序員確保不會發生。

與節點,你可以使用*Sync()版本fs操作(但那些在操作過程中阻止您的應用程序),使用追加模式(這是隻有原子達到一定寫大小,我認爲,這取決於你的如果追加實際上是有用的),使用某種形式的鎖定,或者使用類似隊列的地方,寫入操作將被放入隊列中,並且有一個隊列消費者來處理寫入。

+0

感謝您的回答! 因此,修改共享數據確實存在問題。 我從來沒有遇到過這個問題,但這是我從來沒有真正確定的。 –

+0

我想我記得有人曾經試圖從多個請求中編寫一個JSON文件,而JSON出來都是亂碼:) – robertklep