У меня этот код периодически вызывает функцию load
, которая очень загружает работу с 10 секунд. Проблема заключается в том, когда выполняется функция load
, она блокирует основной поток. Если я отправлю простой запрос GET (например, проверку работоспособности), пока выполняется load
, вызов GET блокируется до тех пор, пока вызов load
не будет завершен.Как создать функцию для работы на фоне?
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 работать на вас? Если вы можете быть более конкретным, возможно, есть и другой способ сделать это. – Molda