Если я правильно понимаю, Node JS не блокирует ... поэтому вместо ожидания ответа от базы данных или другого процесса он перешел к чему-то другому и проверит позже.
Также он однопоточный.
Значит, все это означает, что данный процесс Node JS может полностью и эффективно использовать одно ядро ЦП, но не будет использовать любое другое ядро на машине, как, например, никогда не будет использовать более одного за один раз.
Это, конечно, означает, что другие процессоры все еще могут использоваться другими процессами для таких вещей, как база данных SQL или другие намеренно разделенные тяжелые подпрограммы ЦП, если они являются отдельным процессом.
Также в случае, если процесс Node JS имеет бесконечный цикл или функцию длительного выполнения, этот процесс больше не будет полезен до тех пор, пока не будет остановлен бесконечный цикл или функция длительного выполнения (или не завершится весь процесс).
Все ли это правильно? Я прав в своем понимании?
источник
Ответы:
Да, очень правильно. Сервер node.js имеет внутренний пул потоков, поэтому он может выполнять операции блокировки и уведомлять основной поток обратным вызовом или событием, когда все завершится.
Поэтому я предполагаю, что он будет ограниченно использовать другое ядро для пула потоков, например, если вы выполняете неблокирующее чтение файловой системы, это, скорее всего, реализуется путем указания потока из пула потоков на чтение и установку обратного вызова, когда это сделано, что означает, что чтение может происходить в другом потоке / ядре, в то время как основная программа node.js делает что-то еще.
Но с точки зрения node.js, он полностью однопоточный и напрямую не использует более одного ядра.
источник
Да, я бы сказал, что ваше понимание совершенно верно. Эта статья (в архиве ) достаточно хорошо объясняет причину этого дизайна. Это, наверное, самый важный пункт:
источник
Я подумал, что даже если это старый поток, я поделюсь с ним идеей, как использовать более одного ядра в приложении Node.JS. Как отметил Нурай Алтин, JXcore может это сделать.
Простой пример:
По умолчанию есть две темы (вы можете изменить это с помощью
jxcore.tasks.setThreadCount()
)Конечно, вы можете делать гораздо больше с задачами. Документы здесь .
Несколько статей на эту тему:
источник
Так как этот вопрос задавали почти 2 года назад. Все становится иначе или существуют альтернативные подходы к проблеме многопоточности на Node.JS
Согласно приведенному ниже сообщению в блоге, используя входящее расширение 'task', некоторые могут напрямую воспользоваться другими доступными ядрами.
http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html
источник
Node.js - это однопоточное приложение, но оно может поддерживать параллелизм посредством концепции событий и обратных вызовов. Вот видео от Филиппа Робертса, которое объясняет, как циклы событий работают в JavaScript.
Нажмите здесь, чтобы посмотреть видео
(Вместо WebAPI в Node.js есть API C ++)
источник