2013-10-13 3 views
2

Я разрабатываю приложение node.js, которое полностью не блокирует.Node.js и threads

Существуют, однако, некоторые ресурсоемкие функции:

  • CryptoJS.AES дешифрования/шифровать
  • UUID создание
  • создают контент из данных

Теперь я нашел модуль для использования потоки для выгрузки цикла событий из интенсивных задач ЦП: node-webworker-threads

Если теперь я творю:

  1. При загрузке приложения: один поток на функции, поэтому AES.decrypt есть нить, как AES.encrypt и т.д.
  2. При загрузке приложения: пул потоков на функцию ? (сколько потоков? 1 на ядро ​​процессора?)
  3. При выполнении: новый поток при вводе каждой функции и уничтожить его после завершения?

Нити я что-то не до конца понимаю ..

+0

Вы оценили, насколько быстро эти функции обрабатываются узлом без потоков? Мой MBP может генерировать около 136K (uuid-v4) до 760K (uuid-v1) UUID, чтобы дать идею ... – robertklep

+0

Не тестировалось, но я видел возможность использовать поток для этих задач. Глядя на ваши результаты MBP, я просто не буду использовать потоки. Возможно, я добавлю это позже. Я уже использую кластер. Спасибо за комментарий robert! – xrDDDD

ответ

5

Это действительно зависит от вашего приложения. Если вы используете пул потоков фиксированного размера, вам придется реализовать очередь, если количество запросов> количество доступных потоков, что может вызвать некоторую перегрузку.

Лучшим способом (на мой взгляд, конечно) было бы создать новый поток для каждого запроса, который имеет дело с AES, UUID и данными. То есть один поток на запрос, который выполняет все вычисления. Когда все будет сделано, верните результаты из потока и убейте его.

Это может, конечно, вызвать множество потоков на сервере с высокой нагрузкой; но сохранит ваш цикл событий.

EDIT: This thread может быть интересным для вас.