node.js - Node.js 是否支持并行性?

标签 node.js multithreading concurrency parallel-processing

我一直在研究并发和并行之间的区别。我遇到了 talk on YouTube Rob Pike 谈到并发性和并行性之间的差异。他的演讲是在 Google Go 语言的背景下进行的。据我了解,并发是能够处理多个事物的设计,但并行性是同时物理执行多个事物。

据我了解,Node.js 作为单线程进程运行。那么,虽然 Node 通过实现回调等方式支持并发,但它是否有能力处理任务的并行执行呢?是否可以设置为在不同的处理器上运行多个线程?

最佳答案

Node 可以通过 Nodejs Core API 中打包的 Clusterchild_process 模块支持“并行”。这两个模块都创建了额外的进程,而不是额外的线程。

线程由 libuv 创建和管理,有时在池中,由 node 实现并用于执行异步操作,例如读取从一个文件。 您无法从执行的 Javascript 中显式创建线程。您可以在以下资源中阅读有关 libuv 的更多信息

另外,这是关于 Threads and Pooling 的好问题其中有很多细节。

Cluster 用于将服务器的工作负载分布在多个核心上,并且仍然让它们共享一个端口。但是,Cluster 在后台使用 child_process.fork() 并通过 inter-process communication 进行通信.您可以阅读有关 Cluster in the Nodejs Core API Docs 的更多信息.

child_process通过 exec() 提供了几种不同的并行工作方式, spawn()fork() .父进程可以通过管道使用进程间通信与子进程通信。

基本上,Node 希望您利用 the event loop并将线程管理留给 libuv。这就是为什么构建通常需要锁定和线程安全措施的代码如此容易的原因。如果您必须完成需要繁重的工作或大量阻塞(同步)工作,那么您可以使用 child_process 来卸载该工作。如果您需要跨内核扩展 Web 应用程序,请使用 Cluster

关于node.js - Node.js 是否支持并行性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584439/

相关文章:

javascript - Gulp 单个文件上的 scss 源映射

node.js - 如何将返回值( model.exports 中的 mongoose 查询输出)返回到调用模块

javascript - 从私有(private)以太坊区 block 链在浏览器中实时更新用户余额

java - run方法之外的同步方法

c# - 线程启动的竞争条件

multithreading - 并行和并发编程(Haskell)方面的开销是多少?

node.js - 无法在nodejs中导入typescript文件

Python 终止的线程无法重新启动

Java Swing 多线程和 ui 卡住

java - 为什么在屏障操作执行后无法立即获取 cyclingBarrier?