首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs可以实现多线程吗?

nodejs可以实现多线程吗?
EN

Stack Overflow用户
提问于 2016-10-14 02:28:17
回答 2查看 112.9K关注 0票数 57

Node.js多线程。

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2016-10-14 04:01:38

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

虽然Node.js本身是多线程的-- I/O和其他类似的操作从一个线程池中运行--但实际上,Node.js执行的JavaScript代码都是在一个线程中运行的。这不是Node.js本身的限制,而是V8 JavaScript引擎和JavaScript实现的限制。

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

一般来说,更明确的说法是,每个node.js进程都是单线程的.if,如果你想要多个线程,你也必须有多个进程。例如,您可以使用子进程来实现这一点,这在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/

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

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

“在Node.js中使用多线程有什么优点和缺点?”

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

正如在每个答案中一样,正确的答案是“为工作使用正确的工具”。当然,由于node在设计上是单线程的,所以您可以有更好的多线程方法。

很多人使用的一种技术是用C++、Java、Pythone.t.c制作多线程应用程序,然后通过自动化和Node.js child_process运行它(第三方应用程序通过自动化异步运行,你有更好的性能(例如C++应用程序),你可以在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版本。

希望这能有所帮助。

票数 99
EN

Stack Overflow用户

发布于 2016-10-14 02:30:11

不,你不能在node.js中使用线程。它使用异步的代码执行模型。在异步模型背后,节点本身使用线程。但据我所知,如果没有额外的库,就不能在应用程序中访问它们。

使用异步模型,您实际上不需要线程。这里有一个简单的例子。通常,在多线程环境中,您将在每个线程中运行网络请求,以避免阻塞主线程中的代码执行。使用异步模型,这些请求不会阻塞主线程,并且仍然在其他线程中执行,只是为了使开发过程简单,对您隐藏了这一点。

此外,还可以查看this comment by bazza。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40028377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档