javascript - 是否可以在nodejs中实现多线程?

标签 javascript node.js

Node.js 多线程。

是否可以在 Node.js 中使用多线程?如果是的话。

在 Node.js 中使用多线程有哪些优点和缺点? Node.js 中可以实现多线程的模块有哪些?我是 Node.js 的新手,我从许多博客中读到 Node.js 是单线程的。

我知道 java 多线程,但我需要知道它在 Node.js 中是否可行。

最佳答案

是和否。让我们从头开始。为什么NodeJs是单线程的,这里解释Why is Node.js single threaded?

虽然 Node.js 本身是多线程的——I/O 和其他此类操作从线程池运行——但 Node.js 执行的 JavaScript 代码出于所有实际目的在单个线程中运行。这不是 Node.js 本身的限制,而是 V8 JavaScript 引擎和 JavaScript 实现的一般限制。

Node.js 包含用于集群多个 Node.js 进程的 native 机制,其中每个进程在单独的核心上运行。但这种集群机制不包括任何本地路由逻辑或工作人员之间的共享状态。

一般来说,更明确的说法是,每个 node.js 进程都是单线程的。如果你想要多个线程,你也必须有多个进程。 例如,您可以为此使用子进程,此处描述 http://nodejs.org/api/child_process.html .只是为了您的信息,请查看这篇文章,它很有启发性且写得很好,如果您想使用 child_processes 可能会对您有所帮助 -- https://blog.scottfrees.com/automating-a-c-program-from-a-node-js-web-app

尽管如此,你可以实现一种多线程用C++和原生nodejs C++开发。

首先看看这些答案,也许它们会对你有所帮助,

How to create threads in nodejs

Node.js C++ addon: Multiple callbacks from different thread

Node.js C++ Addon: Threading

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

当然,您可以找到并利用许多提供“多”线程功能的 Node 插件:https://www.npmjs.com/search?q=thread

另外,您可以查看JXCore https://github.com/jxcore/jxcore JXCore 是 Node.js 的分支,允许 Node.js 应用程序在同一进程中的多个线程上运行。所以很可能 JXCore 是适合您的解决方案。

"What are the advantages and disadvantages of using multi-threading in Node.js ?"

这取决于你想做什么。如果您正确利用和使用 Node.js 源代码,并且您的“多”线程插件或进程或其他任何东西,则不会有任何缺点,不要“破解”或滥用 V8 或 Node.js 核心中的任何内容!

与每个答案一样,正确答案是“使用正确的工具完成工作”。 当然,由于 Node 设计为单线程,因此您可以有更好的多线程方法。

很多人使用的一种技术是用 C++、Java、Python 等编写多线程应用程序,然后通过自动化和 Node.js child_process 运行它(第三方应用程序与自动化异步运行,您有更好的性能(例如 C++ 应用程序),并且您可以在 Node.js 应用程序中发送输入和获取输出)。

Disadvantages multi-threading Node.js

检查:https://softwareengineering.stackexchange.com/questions/315454/what-are-the-drawbacks-of-making-a-multi-threaded-javascript-runtime-implementat

请记住,如果您想通过修改 Node.js 来创建一个纯多线程环境,我认为这将是困难的,由于复杂性而存在风险,而且您必须始终与每个新环境保持同步V8 或 Node 版本可能会影响这一点。

希望这会有所帮助。

关于javascript - 是否可以在nodejs中实现多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028377/

相关文章:

javascript - 获取在 javascript 中提交的表单的实例

javascript - 用语法理解 %20 和 blob

javascript - 为什么我不能在 Node.js 中从另一个文件中设置一个导出变量?

javascript - 套接字 io 地址给出 ffff 值

javascript - Three.js Maya导出错误

javascript - Gulp 4 watch 未检测到更改

javascript - 如何编写与 GNU Emacs 一起使用的 Node.js REPL?

node.js - 使用 Array 进行 MongoDB 正则表达式搜索

node.js - 使用 nodeJS 的 sentinal 识别 Redis Master

javascript - 每行不同的文本 Jquery Modal/Dialog 表单