nodejs Worker_thread против Promise.all или allSettled () - PullRequest
0 голосов
/ 18 июня 2020

Я разрабатываю сервер nodeJS с Express. Как вы все знаете, сетевой процесс должен обрабатываться асинхронно. И люди обычно работают с результатом, используя функцию обратного вызова или обещание (async / await).

В моем случае мне нужно отправить десятки запросов на другой сервер для получения данных. но я думаю, что запрашивать их по одному неэффективно. Итак, я нашел Promise.all () и Promise.allSettled () , которые обрабатывают несколько асинхронно и сразу получают все результаты работы. И я также нашел worker_thread в nodeJS, что приводит к аналогичным результатам.

Я не могу понять, какой из них правильный и в чем разница между ними. Кто-нибудь мне поможет?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Поскольку узел является однопоточным, рабочие потоки предназначены для предотвращения блокировки события l oop из-за длительной и сложной вычислительной задачи, которая требует много времени. Однако они не подходят для работы с интенсивным вводом-выводом.

Из узла документация

Рабочие (потоки) полезны для выполнения операций с интенсивным использованием ЦП JavaScript операций. Они не сильно помогут при работе с интенсивным вводом-выводом. Встроенные в Node.js операции асинхронного ввода-вывода более эффективны, чем могут быть Workers.

0 голосов
/ 18 июня 2020

Рабочие потоки предназначены для многопоточности с интенсивным использованием ЦП. Promise.all или Promise.allSettled, вероятно, ваши лучшие ставки здесь. Какой из них вы выберете, зависит от того, как вы хотите поступать с отклонениями / решениями.

Ответ этого парня, вероятно, поможет вам прояснить разницу: { ссылка }

...