콜백은 비동기식입니다. 따라서 콜백에서 오랜 계산을 실행하면 주 스레드에 영향을 미치지 않습니다. 예를 들어NodeJs/expressjs : 콜백에서 긴 코드 실행
는 :
function compute(req,res){ // this is called in an expressjs route.
db.collection.find({'key':aString}).toArray(function(err, items) {
for(var i=0;i<items.length;i++){ // items length may be in thousands.
// Heavy/lengthy computation here, Which may take 5 seconds.
}
res.send("Done");
});
}
그래서, 데이터베이스에 대한 호출이 ascnchronous입니다. 콜백 내부의 for 루프는 메인 스레드를 차단하지 않을 것인가?
차단하는 경우 어떻게 비동기식으로 수행 할 수 있습니까?
콜백 *은 기본 스레드에 있습니다. node.js *에는 하나의 스레드 * 만 있습니다. 다른 프로세스에 위임하지 않고 node.js에서 2 밀리 초 이상을 소비 할 때마다 기분이 나빠질 것입니다. :) – Amadan
그래, 나는 그렇게 느꼈다. 그러나 아무것도 그것에 관해 할 수 없냐? 실제로 나는 5 초를 말함으로써 과장했다. 그러나 때로는 일부 처리가 필요합니다. – codin