2012-02-11 4 views
0

이해 ;/b는/a가 완료 될 때까지 처리되지 않습니까? 그것이 하나의 스레드라면, 그렇게해야합니다. 그래서이 문제를 제거하는 방법은 무엇입니까?NodeJS Parallesim 다음 예를 고려

예 2는, 함수 진입 db.find 호출하므로 db.find가 완료되면, 콜백 res.send (데이터)를 실행하므로

app.get("/a", function(res){ 
    // Some-Library-Database function 
    db.find({"user.id" : 5}, function(data){ 
     res.send(data); 
    }); 
}); 


app.get("/b", function(res){ 
    res.send("done"); 
}); 

다시,/A는 요청 그래서 우리는 기다리지 않고/b로 응답 할 수 있습니다. 그렇죠? (틀렸다면 고쳐주세요)

그래서 예제 1의 예제 2도 어떻게 얻을 수 있습니까? 차단 기능을 비동기로 실행할 수 있습니까? 또는 DB가 IO (TCP를 통해 서버에 명령 보내기 등) 기능을 비동기로 만드는가? 내 말은, 노드 J의 IO에서만 비동기입니까? 큰 계산이 필요하면 IO 요청을해야합니까?

나는 개념에 따라 배우고 만들려고 노력하고있다. 나는 노드에 대한 비평을 읽을 NodeJS is cancer 게시물을 읽었는데, 그가 단지 조업 중인지 아닌지 확실하지 않습니다.

답변

1
  1. 넣어 메인 코드의 시작 부분에 block.js에
  2. 전화 child_process.fork "10 초 동안 일부-차단 기능"('app.js') 블록
  3. 추가 '메시지'이벤트 핸들러 의 .js, 여전히 수 있도록 클라이언트를 b.on('message', function(reply) {...}});

에 당신이 당신의 차단 처리기에서 모든 것을 처리 순차적가이 방법을 답변을 읽고 거기 차단 코드 b.send (인수) 등

  • 콜 아이를두고, 중 IO를 차단 때문에 (그리고 아마도 당신에게 "10 초 동안 차단"당신이 뭔가가있는 경우 업데이트 된 문서, BTW

  • +0

    연결을 'app.js'

    편집 부모에 처리 할 코드를 '차단'사용하지 않는 논 블로킹 노드 대체) 또는 CPU 바운드 작업 (아마도 C/C++과 같은 것으로 다시 작성해야 할 가치가 있음) –

    +0

    링크가 손상된 것으로 보입니다 – Annan

    관련 문제