У меня есть приложение узла, которое запускает долго выполняющиеся задачи, поэтому, когда задача запускается, дочерний процесс разветвляется для запуска задачи.Код создает ответвление для запуска задачи и отправляет сообщение дочернему процессу для запуска.
Первоначально, когда задача была выполнена, я отправлял сообщение обратно в родительский процесс, и родительский процесс вызывал .kill () для дочернего процесса.Я заметил в своем мониторе активности, что процессы узла не были удалены.Все дочерние процессы торчали.Поэтому вместо отправки сообщения родителю и вызова .kill () я вызвал process.exit () в коде дочернего процесса, как только задача была выполнена.
Второй подход, кажется, работает нормально, и явижу, как процессы узлов удаляются из монитора активности, но мне интересно, есть ли у этого подхода недостатки, о которых я не знаю.Один метод лучше, чем другой?В чем разница между этими двумя методами?
Мой код выглядит так для подхода обмена сообщениями.
//Parent process
const forked = fork('./app/jobs/onlineConcurrency.js');
forked.send({clientId: clientData.clientId,
schoolYear: schoolYear
});
forked.on("message", (msg) => {
console.log("message", msg);
forked.kill();
});
//child Process
process.on('message', (data) => {
console.log("Message recieved");
onlineConcurrencyJob(data.clientId, data.schoolYear, function() {
console.log("Killing process");
process.send("done");
});
})
Код выглядит так для дочернего процесса при выходе из
//child Process
process.on('message', (data) => {
console.log("Message received");
onlineConcurrencyJob(data.clientId, data.schoolYear, function() {
console.log("Killing process");
process.exit();
});
})