2016-04-20 6 views
0

Является ли Node.js выполнением только одного контекста во времени или одной команды кода независимо от контекста?Действительно ли node.js выполняет только один контекст?

В случае некоторых двух незаблокированных операций ввода-вывода завершены, и их обратные вызовы вызывается, будут ли они выполняться одновременно или Node.js будет полностью выполнять первый обратный вызов, а затем выполнить второй после этого?

Лучше ли сделать функции обратного вызова простыми и короткими? Будет ли это улучшать параллелизм?

+0

Каждый поворот цикла события выполняется до завершения. Не будет никаких обратных вызовов, чередующихся между произвольными инструкциями. – Bergi

+0

вызываемые обратные вызовы при завершении операций ввода-вывода будут выполняться последовательно, а не одновременно. – Nivesh

ответ

1

node.js - это EDA (архитектура, управляемая событиями) и как таковая по дизайну несовместима для кода приложения. Это не означает, что нет параллельных потоков. Фактически, ввод-вывод выполняется в параллельных потоках, но их данные помещаются в очередь, которая по сути сериализует сообщения ввода-вывода. Таким образом, параллелизм сериализуется. В коде приложения вы не заметите параллелизм. Подумайте об этом, как будто у вас есть только один поток, и вы вообще не можете «перескакивать» или «чередовать» выполнение кода.

Если вы столкнулись с потоком сообщений ввода-вывода, то более быстрая обработка, безусловно, поможет. Быстрые функции обратного вызова означают, что вы можете обрабатывать больше за меньшее время, избегая перегрузки в очереди ввода-вывода. Вот почему вы никогда не должны блокироваться.

+0

Сценарий наихудшего сценария - OP должен добавить буфер FIFO для хранения завершенных потоков, например, 8 уровней или более. Теперь у вас есть «пакетный» режим для перемещения большого количества данных в пакетах. Штраф - это код ниже по потоку, который должен иметь возможность анализировать/обрабатывать натиск данных без блокировки. Преимущество - время разбора позволяет осуществлять параллельную обработку данных, которые НЕ являются зависимыми друг от друга. – Sparky256

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