Мультипроцессор с 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 позволят использовать потоки вместо процессов, что позволит более эффективно взаимодействовать.)