Fra*_*vid 5 parallel-processing concurrency multithreading node.js
I know "cluster" and "child_process" can use multiple cores of a CPU so that we can achieve true parallel processing.
I also know that the async event loop is single-threaded so we can only achieve concurrency.
My question is about worker_threads:
假设我的电脑有 4 核 CPU 并且我正在执行一个 Nodejs 脚本。该脚本创建三个工作线程。
三个工作线程会利用CPU中剩余的3个核心来实现并行吗?
或者三个工作线程将只使用主核心而其余3个核心不被使用,就像事件循环一样?
三个工作线程会利用CPU中剩余的3个核心来实现并行吗?
是的,您可以实现并行性。当然,实际的 CPU 分配取决于操作系统,但这些将是真正的操作系统线程,并且能够利用多个 CPU。
或者三个工作线程将只使用主核心而其余3个核心不被使用,就像事件循环一样?
不可以。每个工作线程可以使用单独的 CPU。每个线程都有自己单独的事件循环。
四个线程不独立的主要时间是当它们希望通过消息传递相互通信时,因为这些消息将通过接收者的事件循环。因此,如果线程 A 向主线程发送一条消息,那么该消息将进入主线程的事件队列,并且不会被主循环接收,直到主循环返回事件循环并从事件队列。反之亦然。如果您从主线程向线程 A 发送一条消息,但线程 A 正忙于执行 CPU 密集型任务,则在线程 A 返回事件循环(例如完成其 CPU 密集型任务)之前,不会收到该消息。
另外,如果您的线程正在执行 I/O(尤其是磁盘 I/O),请务必小心,因为它们可能会竞争对这些资源的访问,并且可能会在继续操作之前等待其他线程完成对资源的使用。