2016-06-03 1 views
4

Я узнал, что интенсивные задачи cpu должны быть перемещены из сервера, а сервер должен отвечать за общение с клиентом и быстро отвечать на запросы не отправлять пакетные электронные письма или вычислять пользователей в базе данных с определенным качеством или изменением размера изображения и т. Д.Как структурировать приложение узла для обработки интенсивных задач процессора?

, так что не сделав этого, как я могу заставить мои узлы оставаться в контакте и управлять процессами вне кода nodejs.

Например,

Пользователь загружает миллион строк большой файл CSV.

Я хочу проанализировать его и вернуться.

Я могу заставить пользователя ждать, пока nodejs проанализирует и вернется с результатом.

Работает, но не масштабируется, если есть 3000 пользователей, все преимущества цикла событий выходят из окна.

Так как я могу справиться с этим.

Я читал, что я должен позволить другим внешним процессам справиться с этим, как? могут ли эти процессы быть написаны на более быстром языке. Что делать, если я хочу передать прогресс клиенту (30%), для этого потребуется связь между процессом и nodejs.

Я думаю, что GO и Nodejs будут лучше комбо, если я смогу это понять.

ответ

3

В узле, если вам нужно выполнить интенсивную работу с ЦП, вы должны использовать child_process. Это позволит основному процессу продолжать обрабатывать запросы и отвечать на запросы клиентов, пока ваш CSV анализируется.

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

Если вы хотите сообщить о прогрессе, вы можете использовать сообщения между процессами «Родительский и дочерний» для передачи статуса анализа CSV с помощью child.send() (связь между родителями и детьми) и process.send() («От ребенка к родительскому соединению»). See this example из Документов узла для обмена данными между родительскими и дочерними процессами.

1

1) Использовать обратные вызовы, назначать задачи, интенсивные для ЦП, для пула потоков путем планирования обратного вызова.

2) Используйте дочерние процессы, если вы хотите увеличить загрузку процессора, потому что один процесс узла привязан к одному ядру, даже если на вашем компьютере имеется несколько ядер, вы никогда не сможете использовать всю мощь своего если вы не создадите дочерние процессы.

3) Говоря о дочерних процессах, для управления несколькими дочерними процессами используется cluster api, чтобы развить новый процесс в соответствии с ядрами вашего компьютера.

Итак, в основном логика nodejs говорит, что основной поток занят планированием задач, чтобы пул потоков не выполнял сам.

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