node.js - 我们可以在带有工作线程的 NodeJs 中使用多个 cpu 内核实现并行处理吗?

标签 node.js multithreading concurrency parallel-processing

我知道“cluster”和“child_process”可以使用一个 CPU 的多个核心,这样我们就可以实现真正的并行处理。

我也知道异步事件循环是单线程的,所以只能实现并发。

我的问题是关于 worker_threads 的:

假设我的电脑有 4 核 CPU 而我正在执行一个 nodejs 脚本。该脚本创建三个工作线程。

三个工作线程是否会利用 CPU 中剩余的 3 个核心来实现并行性?

或者三个工作线程只使用主核而其余三个核像事件循环一样不使用?

最佳答案

Would the three worker thread make use of the remaining 3 cores in the CPU to achieve parallelism?

是的,你可以实现并行。当然,实际的 CPU 分配取决于操作系统,但这些将是真正的操作系统线程,并且能够利用多个 CPU。

or the three worker threads will only use the main core and the remaining 3 core are not used just like the event loop?

没有。每个工作线程都可以使用一个单独的 CPU。每个线程都有自己独立的事件循环。

四个线程不会独立的主要时间是当它们希望通过消息传递相互通信时,因为这些消息将通过接收者的事件循环。因此,如果线程 A 向主线程发送一条消息,那么该消息将进入主线程的事件队列,并且在主循环返回事件循环之前不会被主循环接收事件队列。反之亦然。如果您从主线程向线程 A 发送消息,但线程 A 正忙于执行 CPU 密集型任务,则在线程 A 返回事件循环(例如完成其 CPU 密集型任务)之前不会收到该消息。

此外,如果您的线程正在执行 I/O(尤其是磁盘 I/O),请小心,因为它们可能会竞争对这些资源的访问权限,并且可能会卡住等待其他线程完成对资源的使用,然后才能继续。

关于node.js - 我们可以在带有工作线程的 NodeJs 中使用多个 cpu 内核实现并行处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66067300/

相关文章:

node.js - 将 Rover 与 graphql-shield 结合使用

c# - 在 wpf 应用程序中运行其他控制台进程之前如何等待控制台进程完成?

c++ - 我可以在 VS2010 中获取 VS2012 标准库吗

python-3.x - 如何在 python 中只运行一次算法

进程可以等待不是子进程之一的 PID 吗?

javascript - Node.js 从 0.10.2 更新到 0.12.2 后出现错误 "ReferenceError: global is not defined"

javascript - 使while循环同步

Node.js log4j-like 日志系统

java - 使用 ScheduledExecutorService 的计划任务?一个好主意?

swift - 等待 openParentApplication 回调完成