Как сделать событие, требующее неблокирования времени?

Я думал - поскольку node.js работает в одном потоке, что делать, если я хочу выполнить некоторые алгоритмически сложные вычисления (hard_and_complex_function()), что не имеет ничего общего с I/O, но занимает много времени? Могу ли я сделать его неблокирующим? Разве это не недостаток по сравнению с многопоточными технологиями - где я могу просто запустить его в отдельном потоке?

2 ответа

Хотя вы правы в отношении потоков, у вас есть как минимум два варианта, которые могут решить вашу проблему:

  1. Используйте process.nextTick(), чтобы получить процессор в соответствующих точках при длительном вычислении.
  2. Используйте отдельный процесс (с помощью child_process или Cluster) для выполнения ваших длинных вычислений.

Вы также можете, для будущего использования, взглянуть на генераторы и yield доступ к ES6.


Существует решение, позволяющее использовать приложение Node.js. Посмотрите ниже библиотеки:

https://github.com/xk/node-threads-a-gogo

licensed under cc by-sa 3.0 with attribution.