Подтвердить что ты не робот

Почему масштабируется Node.js?

node.js масштабируемый, что подразумевается под этим? Какая часть сервера node.js является масштабируемой. Я читал, что это однопоточная технология, которая не подходит для приложений, которым требуется много ресурсов ЦП. Эти факты не соответствуют масштабируемости, поэтому что подразумевается под этим?

4b9b3361

Ответ 1

javascript, который запускает node, является однопоточным, но многие из тех, что вы вызываете в node - таких как сеть или файл io - запускаете в фоновом потоке. См. Это сообщение для базового обзора: Node не является ничейным

Если вам нужны подробные сведения, вы должны изучить libuv, который является "магическим" произведением, преобразующим потоки в циклы событий: http://nikhilm.github.io/uvbook/basics.html#event-loops

Кроме того, если вам нужно сделать что-то интенсивное CPU в node, вы можете легко отправить его дочернему процессу - см. http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options для получения более подробной информации

Ответ 2

Разве это не является более масштабируемым "per se". Более того, все, что вы делаете, является (I/O) масштабируемым без необходимости делать что-либо особенное.

I/O более безопасен и проще выполнять параллельно, поскольку он не имеет возможности обмениваться данными между потоками исполнения. Node.js позволяет вам делать это с помощью программирования событий, которое является простым, элегантным и простым в использовании. Является старой и проверенной парадигмой программирования, используемой годами для графических интерфейсов и других графических приложений, например игр.

На самом деле он менее масштабируемый, чем полноценные языки, такие как С++, c, java и т.д., которые могут значительно улучшиться благодаря использованию полной многопоточности. Это позволяет также масштабировать процессор, но также открывает банку червей. Для совместного использования ЦП вы должны обмениваться данными, а это еще одна история (семафоры, блокировки и т.д.)

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

Большинство веб-сервисов привязаны к IO, поэтому Node.js подходит хорошо, и для большинства случаев это нормально. Но как только вы начнете использовать интенсивную работу с ЦП, события не обслуживаются, и все останавливается. В этом случае лучше использовать другой язык. Для этого нет действительно хорошего решения для Node. Вы можете создавать несколько процессов, но тогда вы не сможете обмениваться данными между ними. Без обмена данными нет возможности эффективно масштабировать процессор, поэтому лучше не пытаться.

Используйте Node.js для ввода-вывода и еще один подходящий язык с правильной многопоточной обработкой для интенсивной работы с ЦП.

Ответ 3

он масштабируется благодаря балансировке нагрузки. По существу, вы можете иметь несколько заданий для node для обработки, и он может справиться с этим без существенного бремени. Это делает его масштабируемым.

Ответ 4

Все API-интерфейсы Node написаны так, что они поддерживают обратные вызовы.

Например, функция чтения файла может начать чтение файла и немедленно вернуть элемент управления в среду выполнения, чтобы можно было выполнить следующую команду. После завершения ввода-вывода файла он вызовет функцию обратного вызова при передаче функции обратного вызова, содержимое файла в качестве параметра. Таким образом, нет блокировки или ожидания ввода/вывода файлов. Это делает Node.js очень масштабируемым, так как он может обрабатывать большое количество запросов, не дожидаясь, пока какая-либо функция вернет результат. - Учебная точка.