Понимание параллелизма / параллелизма в модуле Async - Node JS - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть веб-сервер, на котором запущен процесс Node, которым управляет pm2, а веб-сервер имеет 16 доступных ядер.

Процесс Node управляет очередью задач с использованием асинхронного модуля.Эта очередь задач, в зависимости от количества поступающих событий, может увеличиться до 10 000 в случае разрыва между процессом Node и сервисом, с которым он взаимодействует.

Очередь будет поддерживать этот список задачв случае разъединения, а затем при восстановлении соединения выполняются поставленные в очередь задачи.

Документы говорят следующее ...

Задачи, добавленные кочереди обрабатываются параллельно (до лимита параллелизма).Если все рабочие выполняются, задача ставится в очередь, пока один из них не станет доступным.Как только работник завершает задачу, вызывается обратный вызов этой задачи.

Вот мои вопросы ...

  1. Если в очереди было 10 000 задач,и я установил уровень параллелизма равным 1, прав ли я, полагая, что они будут по существу выполняться по одному за раз?Если так, я думаю, это означает, что, если новые задачи будут добавлены, эта очередь потенциально никогда не будет полностью очищена?

  2. Если бы я должен был установить значение параллелизма равным 16, он бы по существу выполнялся16 задач параллельно, используя каждое ядро ​​процессора?Или параллелизм управляется чем-то другим?

  3. Как задачи выполняются параллельно?Насколько я понимаю, что один процесс Node может использовать только одно ядро ​​за раз, потому что он однопоточный.

  4. Я полностью упускаю из виду то, как асинхронные модули управляют параллельными задачами ?!

Заранее спасибо вам, умная связка!

1 Ответ

0 голосов
/ 15 ноября 2018

1) Да, они будут выполнены последовательно. Если вы не установили тайм-аут для задачи, то вы никогда не истощите очередь.

2) нет. Все задачи будут выполняться на том же ядре, на котором работает приложение вашего узла. Распространите задачи среди рабочих, и вы получите многопроцессную очередь (взгляните на дочерний процесс и ipc)

3) если задачи представляют собой блокирующий код, ничего не будет параллельно. Но если вы пишете на диск / в сеть, вы выполняете асинхронную работу и, ожидая ответа, механизм продолжает работу с остальной частью кода

4) немного. Но вы на пути к этому. ;)

...