当前位置:首页 > 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 同时完成:

js怎么实现并行

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 模块创建独立进程:

js怎么实现并行

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');
  });

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

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

标签: js
分享给朋友:

相关文章

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现vue路由

js实现vue路由

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

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…