Мультипроцессор с v8 и node.js

Я читал, что V8 не многопоточный, и не может быть в дизайне.

Это правда? Действительно ли это так, что я могу иметь сценарий, оптимизированный для одновременной работы (на node.js), но этот параллелизм не может распространяться на несколько процессоров? Я вроде думал, что это было главной причиной одновременного дизайна.

4 ответа

Решение

Что касается node.js, он не параллельный, а асинхронный. Есть один поток и один цикл обработки событий, который обрабатывает все операции ввода-вывода в node.js.

В node.js есть несколько инструментов для параллелизма, которые в основном вращаются вокруг нескольких процессов. Но, как и все node.js, они находятся на ранних стадиях разработки. Например, вы можете управлять несколькими рабочими процессами, используя fugue, или вы можете использовать, возможно, знакомый API Web Workers, используя node-worker.

Для Node v0.8 и выше модуль https://github.com/audreyt/node-webworker-threads теперь предоставляет тот же API Web Worker, реализованный с собственными потоками, предназначенными для многоядерного планирования, с более низкой сериализацией и созданием рабочих. накладные расходы по сравнению с модулем узла-рабочего на основе процессов.

Смотрите ограничение по времени выполнения. Это возможно, но я не уверен, насколько вероятно, что это будет так просто, как, скажем, Java.

Начиная с v0.6 вы можете использовать кластер.

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

(Изоляторы v8 позволят использовать потоки вместо процессов, что позволит более эффективно взаимодействовать.)

Другие вопросы по тегам