Возможно ли добиться многопоточности в nodejs?

Многопоточность Node.js.

Можно ли использовать многопоточность в Node.js? Если да.

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

Я знаю многопоточность Java, но мне нужно знать, возможно ли это в Node.js или нет.

Ответ 1

Да и Нет. Начните с начала. Почему NodeJs однопоточен, объясняется здесь Почему Node.js однопоточная?

Хотя сам Node.js является многопоточным - операции ввода-вывода и другие подобные операции выполняются из пула потоков - код JavaScript, выполняемый Node.js, запускается для всех практических целей в одном потоке. Это не является ограничением самого Node.js, а скорее всего механизма JavaScript V8 и реализаций JavaScript.

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

В целом и более ясно утверждение состоит в том, что каждый процесс Node.js является однопоточным. Если вы хотите несколько потоков, у вас также должно быть несколько процессов. Например, для этого можно использовать дочерний процесс, который описан здесь http://nodejs.org/api/child_process.html. И только для вашей информации, посмотрите также эту статью, очень поучительно и хорошо написано и, возможно, поможет вам, если вы хотите работать с child_processes - < а2 >

Несмотря на все вышесказанное, вы можете достичь своего рода многопоточности с разработкой С++ и native nodejs С++.

Прежде всего, проверьте эти ответы, возможно, они вам помогут,

Как создавать потоки в nodejs

Node.js С++ addon: несколько обратных вызовов из другого потока

Node.js С++ Addon: Threading

https://bravenewmethod.com/2011/03/30/callbacks-from-threaded-node-js-c-extension/

Конечно, вы можете найти и использовать множество плагинов node, которые предоставляют возможность "multi" -threading: https://www.npmjs.com/search?q=thread

Кроме того, вы можете проверить JXCore https://github.com/jxcore/jxcore JXCore - это fork Node.js и позволяет приложениям Node.js работать на нескольких потоках, размещенных в одном и том же процессе. Так что наиболее вероятно JXCore - это решение для вас.

"В чем преимущества и недостатки использования многопоточности в Node.js?"

Это зависит от того, что вы хотите сделать. Нет недостатков, если вы правильно используете и используете источники Node.js, а ваши "многопоточные" плагины или процессы или что-то еще, не "взломайте" или не используйте что-либо из ядра V8 или Node.js!

Как и в каждом ответе, правильным ответом является "использование правильных инструментов для работы". Конечно, поскольку node по дизайну однопоточно, вы можете иметь более эффективные подходы к многопоточности.

Метод, который использует много людей, состоит в том, чтобы сделать их многопоточное приложение на С++, Java, Python и т.д., а затем они запускают его через автоматизацию и Node.js child_process (стороннее приложение выполняется асинхронно с автоматизация, у вас есть более высокая производительность (например, приложение на С++), и вы можете отправлять входные данные и получать результат в приложении Node.js и из него).

Недостатки многопоточности Node.js

Проверьте это: https://softwareengineering.stackexchange.com/questions/315454/what-are-the-drawbacks-of-making-a-multi-threaded-javascript-runtime-implementat

Имейте в виду, что если вы хотите создать чистую многопоточную среду в Node.js, изменив ее, я полагаю, что это будет сложно, рискованно из-за сложности, более того, вы должны быть всегда в курсе каждый новый выпуск V8 или node, который, вероятно, повлияет на это.

Надеюсь, что это поможет.

Ответ 2

Нет, вы не можете использовать потоки в node.js. Он использует асинхронную модель выполнения кода. За асинхронной моделью сам node использует потоки. Но, насколько я знаю, они не могут быть доступны в приложении без дополнительных библиотек.

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

Также проверьте этот комментарий от bazza.