Skip to content

node 架构

node 的最大特点

  1. 事件驱动的非阻塞 io 模型,直接体现:可以同时处理大量并发请求
  2. 单线程模型
  3. 跨平台 这些特点使 Node.js 在处理高并发、I/O 密集型应用时具有优秀的性能和良好的用户体验。

node 是单线程的,它如何使用多核的能力?

两种方式

  1. cluster 模式,用于处理大量并发请求
  2. child_process 模式,用于处理 I/O 密集型应用 总结:
  • 对于计算特别大的任务并进行结果汇总,child_process 模块是一种合适的选择,因为它允许你创建多个独立的子进程来并行处理任务,并将结果汇总到主进程。cluster 模块更多用于提高应用的并发处理能力,而 child_process 更适合处理计算密集型任务。

demo

main.js

js
const { fork } = require("child_process");
const path = require("path");

// 假设你有 4 个子任务
const numTasks = 4;
const results = [];
let completedTasks = 0;

for (let i = 0; i < numTasks; i++) {
  // 使用 fork 方法创建子进程
  const child = fork(path.join(__dirname, "worker.js"));

  // 发送任务到子进程
  child.send({ task: `Task ${i + 1}` });

  // 监听子进程的结果
  child.on("message", (result) => {
    results.push(result);
    completedTasks++;

    // 检查是否所有子任务都完成了
    if (completedTasks === numTasks) {
      console.log("所有任务完成。汇总结果:", results);
    }
  });

  // 处理子进程错误
  child.on("error", (err) => {
    console.error("子进程出错:", err);
  });
}

worker.js

js
process.on("message", (message) => {
  // 模拟计算任务
  const result = `结果: 计算 ${message.task}`;

  // 返回结果到主进程
  process.send(result);
});