Должен ли я использовать для цикла асинхронный способ, когда я использую node.js? - PullRequest
1 голос
/ 11 января 2012

Я тестирую с помощью node.js с экспрессом.

Теоретически, если я запускаю что-то очень тяжелое вычисление для цикла for без каких-либо обратных вызовов,

заблокирован и другой запрос должен игнорироваться.

Но в моем случае обычный "для цикла"

for(var i=0;i<300000;i++) {
    console.log( i );
}

не создает никаких блоков запросов, а только загружает процессор.

Он принимает и другие запросы.

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

process.nextTick()

Или node.js позаботится о базовых функциях цикла (for, while) с обертыванием их с process.nextTick () по умолчанию?

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Узел выполняется в одном потоке с циклом событий, поэтому, как вы сказали, когда выполняется цикл for, никакой другой обработки не произойдет.Сокет TCP базовой операционной системы вполне может принимать входящие соединения, но если узел занят выполнением вашей циклической логики, сам запрос не будет обрабатываться до тех пор, пока не будет получен.

Если вам абсолютно необходимо запустить какой-то длительный процесс вТеперь вы должны использовать отдельные рабочие процессы для выполнения вычислений и оставить основной цикл событий для обработки запросов.

0 голосов
/ 12 января 2012

Узел не переносит циклы с process.nextTick().

Возможно, ваша программа продолжает принимать новые соединения, потому что console.log возвращает управление в основной цикл событий; так как это операция ввода / вывода.

...