2013-03-26 2 views
4

Я следую каждому методу асинхронного модуля (https://github.com/caolan/async#each). Он говорит, что метод повторяется по массиву параллельно. «Parallely» - это слово, которое меня смущает. AFAIK, теперь JavaScript может выполнять код параллельно, потому что он имеет однопоточную модель.NodeJS: Параллельность асинхронного модуля

Примеры, показанные в каждом методе, ориентированы на сценарии ввода-вывода. Я использую метод «каждый» только для добавления чисел массива. Если существует параллелизм, могу ли я доказать это с помощью моего примера?

Спасибо за чтение.

+2

Это не 'параллель 'в терминах параллелизма, а' parallel' в терминах независимых друг от друга (см. [EachSeries] (https://github.com/caolan/async#eachseriesarr-iterator-callback) для которая обрабатывает каждый элемент * после * другого). Для ввода-вывода это имеет смысл; для расчетов это не так. – robertklep

+0

Спасибо robertklep за ответ. Можете ли вы отправить свой ответ в виде отдельного ответа, чтобы я мог его принять? –

+0

Я осмелюсь сказать, что это довольно вводящее в заблуждение. Они должны просто называть это «асинхронно», потому что это то, что он на самом деле делает. Идея «параллелизма» передает смысл операций, которые могут перекрываться во времени. Эта функция 'parallel' только гарантирует, что ее аргументы функции будут вызываться асинхронно. –

ответ

3

Параллель в асинхронной документации не относится к «параллельной» с точки зрения параллелизма (например, к нескольким процессам или потокам, выполняемым одновременно), но «параллельно» с точки зрения каждого шага, не зависящего от другие действия (противоположная операция будет eachSeries, где каждый шаг запускается только после завершения предыдущего).

Параллельная версия имеет смысл только в том случае, если этапы выполняют какой-либо ввод-вывод, который (из-за асинхронной природы узла) может работать параллельно друг другу: если один шаг должен ждать ввода-вывода, другой шаги могут с радостью продолжать отправлять/получать данные.

Если шаги в основном связаны cpu (т. Е. Выполняют множество вычислений), это не даст вам никакой лучшей производительности, потому что, как вы говорите, узел запускает интерпретатор в одном потоке, и это не что-то это async меняется.

1

Как и в случае с robertklep, это скорее параллельное, а не параллельное. Вы не достигнете большого прироста производительности, параллельно вычисляя тяжелый код. Это полезно, когда вам приходится выполнять параллельный ввод-вывод (например, связь с внешней веб-службой для всех элементов массива).

+0

Спасибо Муним, я понимаю сейчас –

Смежные вопросы