2017-01-27 3 views
0

Я программировал в основном на других языках программирования, но я делаю webapp в пользовательском NodeJS и сталкиваюсь с несколькими вещами, которые я не могу получить.Что такое рабочие в NodeJS

я упомянул https://nodejs.org/api/cluster.html#cluster_how_it_works

Я обнаружил, что это объяснило, ну, как NodeJS может справиться с большим количеством запросов, несмотря на узле только будучи однопоточным. Однако меня смущает, когда говорится, что порт «разделяет» многих «рабочих».

Теперь, если узел не многопоточен, то каковы именно эти рабочие. Например, в java вы можете использовать многопоточные приложения, используя, например, Completed Futures. Они заставляют разные потоки брать на себя ответственность.

Но что такое рабочий в узле, если не поток?

ответ

1

Узел может легко обрабатывать 10 000 одновременных соединений в одном потоке (подробнее см. this answer). Для некоторых вещей, которые блокируют, он использует пул потоков, но это прозрачно для вас. Ваш JavaScript использует однопоточный цикл событий в каждом процессе.

Имейте в виду, что nginx, веб-сервер, который известен скоростью, также является однопоточным. Redis, база данных, известная для скорости, также однопоточная. Многопоточность хороша для задач, связанных с CPU (при использовании одного потока на один процессор), но для задач с привязкой к I/O, к которым обычно используется узел, однопоточные циклы событий работают лучше.

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

Смотрите ответы на эти вопросы для получения более подробной информации:

+0

Большое спасибо. Отличный ответ и ресурсы! –