Node.js 中的 Worker_threads.parentPort.on() 函数

2025 年 5 月 1 日 | 阅读 4 分钟

在本文中,我们将讨论 Node.js 中 worker_threads.parentPort.on() 函数的语法、参数、用例和示例。

Node.js 中的 worker_threads.parentPort.on() 函数是什么?

Node.js 中的 worker_threads 模块的一部分,worker_threads.parentPort.on() 用于生成和管理线程,以便 JavaScript 代码可以并行执行。它适用于 CPU 密集型任务,而不会中断主事件循环,因为它允许并行处理,从而优化多个 CPU 核心的利用率。

ParentPort-based messages.worker.on('message') 函数允许父线程访问 postMessage(),而 worker 用于从父线程发送消息。使用 parentPort.on('message'),在此线程中可以使用 postMessage()。工作线程的父线程(主线程)的通信关系由 parentPort 属性表示。创建工作线程时,一种连接到父线程的方法是使用 parentPort。此机制使得主线程和工作线程之间的消息发送和接收成为可能。

语法

它具有以下语法:

说明

parentPort.on() 函数监听来自主线程的通信。工作线程可以使用 parentPort.postMessage() 接收主线程发送的消息,并做出适当响应。

要点

  • parentPort.on('message', callback): 持续监听来自主线程的任何消息。
  • 通信: postMessage 和 on('message') 函数允许主线程和工作线程交换消息。
  • 错误处理: ParentPort 还可以处理错误事件,这有助于多线程代码的调试。

用例

parentPort.on() 函数和 worker_threads 模块特别有助于

  • 将复杂的计算(例如图片修改和数据处理)转移到其他地方。
  • 并发执行任务而不干扰其他 JavaScript 代码。

示例 1

在这里,我们需要创建两个不同的文件来执行上述机制。

1. 创建名为 main.js 的主文件

2. 创建名为 worker.js 的另一个文件

说明

Main.js

  • 生成一个工作线程来运行 worker.js。
  • 主线程使用 worker.postMessage() 函数向工作线程发送消息。
  • .
  • 主线程使用 Worker.on('message', callback) 来监听工作线程返回的任何消息。
  • 还维护错误和退出事件以进行更好的错误管理。

Worker.js

  • ParentPort.on() 函数监听主线程的通信。
  • 收到消息后,它会被记录到控制台。
  • 为了响应,工作线程通过 parentPort.postMessage() 将消息发送回主线程。

现在,我们需要遵循一些步骤来运行上述示例

步骤 1

确保这两个文件位于同一目录中。

步骤 2

使用命令在 node.js 中运行主文件

输出

 
Received from main thread: Hello from the main thread
Message from worker: Hello from the worker   

示例 2

让我们看另一个例子来说明 Node.js 中的 worker_threads.parentPort.on() 函数。

Main.js 文件

使用命令运行这些主类

Worker.js 文件

输出

 
Received from main thread: Hello from the main thread
Message from worker: Hello from the worker. You said: "Hello from the main thread"
Worker exited successfully   

结论

总之,Node.js 中的 worker_threads 模块,特别是 parentPort.on() 函数,是创建工作线程以促进并行处理的有用工具。主线程和工作线程由于消息传递而可以轻松通信。工作线程可以响应主线程发送的任务或数据。通过帮助分载 CPU 密集型任务,此功能可使 Node.js 应用程序保持响应,特别是在事件循环可能被阻止的情况下。Worker_threads 使开发人员能够编写更有效、可扩展的程序,利用多个 CPU 核心。这种方法特别适合数据处理和照片编辑等计算密集型工作,因为同时管理多个任务可以显著提高生产力。