2014-06-08 4 views
0

난 그냥 노드와 몽구스와 장난하고 있는데 다음과 같은 문제에 대한 궁금 :노드 JS + 몽구스 : 동안 내부 문서를() 저장

내가 루프/간격 내에서 몽고에 문서를 저장하려고 .

다음 작품 잘 :

setInterval(function(){ 

    var doc = new myModel({ name: 'test' }); 

    doc.save(function (err, doc){ 
     if (err) return console.error(err); 
     doc.speak(); 
    }); 

}, 1); 

이 작동하지 않음 다음

while(true){ 

    var doc = new myModel({ name: 'test' }); 

    doc.save(function (err, doc){ 
     if (err) return console.error(err); 
     doc.speak(); 
    }); 

} 

이 동작에 대한 설명 무엇입니까? 시나리오 2에서는 저장 콜백이 실행되지 않습니다.

또한 "장기간 근로자"를 구축하는 모범 사례에 대해 의견을 개진 할 수 있습니까? 노드를 사용하여 데이터 대기열을 처리하는 백그라운드 작업자를 만드는 데 관심이 있습니다. 잠시() 나쁜 생각입니까? setInterval()? 또한 프로세스를 유지하기 위해 영원 모듈을 사용할 계획입니다

감사!

답변

2

Node.js가 단일 스레드이므로 doc.save 콜백을 실행할 기회가 결코 주어지지 않으므로 while(true)이 완전히 단일 스레드를 차지합니다.

질문의 두 번째 부분은 너무 광범위하며 어쨌든 한 번에 한 가지 질문 만해야합니다.

+0

쿨 - 고마워. 귀하의 대답은 노드의 단일 스레드 특성에 대한 몇 가지 추가 기사를 읽게했습니다. 무한한 while()이이 스레드가 다른 "대기중인"함수 호출을 실행하는 것을 차단한다는 것을 완벽하게 이해합니다. – sudoyum