2013-06-02 3 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는 상관하지 않습니다.

적어도 유닉스에서는 동일한 파일에 여러 개의 작성자가있는 것이 합법적입니다. 때로는 문제가되지 않습니다. (예 : 파일이 고정 크기 레코드로 구성되어 있고, 기록자 1 번이 X를 기록하고 기록자 2가 Y를 기록하기 위해 X! == Y로 씁니다.) 때로는 (예 : 두 작가는 모두 X를 기록하기를 원합니다).

노드에서는 I/O 작업이 "순서대로 진행되기"때문에 문제가 완화되지만 두 작가의 상호 작용 가능성이 여전히 존재한다고 생각합니다. 프로그래머는 그런 일이 일어나지 않도록해야합니다.

노드를 사용하면 fs 작업의 *Sync() 버전을 사용할 수 있지만 작동 중에 앱을 차단합니다. 추가 모드를 사용합니다.이 모드는 내가 생각하는 특정 쓰기 크기까지만 사용되며, 요구 사항이 실제로 유용하다면), 잠금 형식을 사용하거나, 쓰기 작업이 대기열에 배치되고 쓰기 작업을 처리 할 단일 대기열 사용자가있는 대기열과 같은 것을 사용하십시오.

+0

답변 해 주셔서 감사합니다. 공유 데이터를 수정할 때 실제로 문제가 있습니다. 나는이 문제를 개인적으로 보아 본 적이 없지만, 내가 정말로 확신하지 못했던 것입니다. –

+0

여러 요청에서 JSON 파일을 작성하려고 한 사람이 기억 나는 것으로 생각되며 JSON이 모두 깨져서 표시되었습니다. :) – robertklep

관련 문제