Ответ 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 С++.
Прежде всего, проверьте эти ответы, возможно, они вам помогут,
Node.js С++ addon: несколько обратных вызовов из другого потока
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
Имейте в виду, что если вы хотите создать чистую многопоточную среду в Node.js, изменив ее, я полагаю, что это будет сложно, рискованно из-за сложности, более того, вы должны быть всегда в курсе каждый новый выпуск V8 или node, который, вероятно, повлияет на это.
Надеюсь, что это поможет.