이 코드는 주기적으로 load
함수를 호출합니다.이 함수는 10 초가 걸리는 작업을 매우 많이로드합니다. 문제는 load
함수가 실행 중일 때 주 흐름을 차단하는 것입니다. load
이 실행되는 동안 건강 검진과 같은 간단한 GET 요청을 보내면 load
호출이 완료 될 때까지 GET 통화가 차단됩니다.기능을 백그라운드에서 실행하려면 어떻게해야합니까?
function setLoadInterval() {
var self = this;
this.interval = setInterval(function doHeavyWork() {
// this takes 10 sec
self.load();
self.emit('reloaded');
}, 20000);
나는 async.parallel을 시도했지만 여전히 GET 호출이 차단되었다. 나는 setTimeout
을 시도했지만 같은 결과를 얻었습니다. load
을 백그라운드에서 실행하여 메인 플로우를 차단하지 않으려면 어떻게해야합니까?
this.interval = setInterval(function doHeavyWork() {
async.parallel([function(cb) {
self.load();
cb(null);
}], function(err) {
if (err) {
// log error
}
self.emit('reloaded');
})
}, 20000);
'self.load();'가 정확히 10 초가 걸리는 이유는 무엇입니까? 내 말은 별도의 프로세스에서 수행 할 수 있다면 fork | spawn | exec 중 하나를 사용하여 이벤트 루프를 차단하지 않습니다. – Molda
지도에서 1M 키 값 쌍을 읽고 일부 필터링을 수행합니다. – codereviewanskquestions
질문은 당신이 필요로하는 것을하기위한 더 좋은 방법이 아닙니까? 데이터가 DB에서 온 것이면 왜 DB를 사용하게할까요? 좀 더 구체적 일 수 있다면 다른 방법이있을 수도 있습니다. – Molda