当前位置:首页 > JavaScript

js怎么实现并行

2026-04-04 14:27:13JavaScript

并行实现方法

JavaScript 是单线程语言,但可以通过多种方式模拟并行执行或利用多线程能力。

Web Workers

Web Workers 允许在后台线程中运行脚本,与主线程并行执行。创建一个新的 Worker 实例并传递脚本文件路径:

const worker = new Worker('worker.js');
worker.postMessage({ data: 'some data' });
worker.onmessage = (e) => {
  console.log('Message from worker:', e.data);
};

worker.js 文件内容示例:

self.onmessage = (e) => {
  const result = e.data.data.toUpperCase();
  self.postMessage(result);
};

Promise.all

对于异步操作的并行执行,使用 Promise.all 等待多个 Promise 同时完成:

const promise1 = fetch('https://api.example.com/data1');
const promise2 = fetch('https://api.example.com/data2');

Promise.all([promise1, promise2])
  .then(([response1, response2]) => {
    console.log(response1, response2);
  });

Async/Await 结合 Promise.all

使用 async/await 语法糖使代码更清晰:

async function fetchParallel() {
  const [res1, res2] = await Promise.all([
    fetch('https://api.example.com/data1'),
    fetch('https://api.example.com/data2')
  ]);
  const data1 = await res1.json();
  const data2 = await res2.json();
  console.log(data1, data2);
}

Cluster 模块 (Node.js)

在 Node.js 中,使用 cluster 模块创建子进程实现并行:

const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  const cpuCount = os.cpus().length;
  for (let i = 0; i < cpuCount; i++) {
    cluster.fork();
  }
} else {
  require('./server');
}

Child Process (Node.js)

通过 child_process 模块创建独立进程:

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

SharedArrayBuffer 和 Atomics

在支持的环境中使用共享内存进行线程间通信:

const sharedBuffer = new SharedArrayBuffer(16);
const sharedArray = new Int32Array(sharedBuffer);

// 在 Worker 中可以使用 Atomics 操作共享内存
Atomics.store(sharedArray, 0, 123);

Service Workers

用于离线缓存和网络请求拦截,可实现后台并行处理:

navigator.serviceWorker.register('/sw.js')
  .then(registration => {
    console.log('ServiceWorker registered');
  });

选择方法取决于具体场景:

js怎么实现并行

  • 浏览器环境优先考虑 Web Workers 和 Service Workers
  • Node.js 环境适合使用 Cluster 和 Child Process
  • 简单异步并行使用 Promise.all
  • 需要共享内存时考虑 SharedArrayBuffer

标签: js
分享给朋友:

相关文章

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js实现复选框

js实现复选框

实现复选框的基本方法 使用HTML的<input type="checkbox">元素创建复选框,并通过JavaScript监听其状态变化。 <input type="checkb…

js 实现文件上传

js 实现文件上传

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。以下是一个基础示例: <input ty…