当前位置:首页 > JavaScript

js多线程如何简单实现

2026-02-28 18:44:12JavaScript

使用 Web Workers 实现多线程

Web Workers 是浏览器提供的 API,允许在后台线程中运行 JavaScript 代码,避免阻塞主线程。创建一个新的 Worker 只需指定一个脚本文件:

// 主线程代码
const worker = new Worker('worker.js');
worker.postMessage({ data: 'Hello Worker' });
worker.onmessage = (event) => {
  console.log('Received from worker:', event.data);
};
// worker.js
self.onmessage = (event) => {
  console.log('Received in worker:', event.data);
  self.postMessage({ response: 'Message processed' });
};

使用 SharedArrayBuffer 共享内存

通过 SharedArrayBuffer 可以在多个线程间共享内存,配合 Atomics 实现线程安全操作:

// 主线程
const sharedBuffer = new SharedArrayBuffer(16);
const sharedArray = new Int32Array(sharedBuffer);

const worker = new Worker('worker.js');
worker.postMessage({ buffer: sharedBuffer });

// worker.js
self.onmessage = (event) => {
  const sharedArray = new Int32Array(event.data.buffer);
  Atomics.add(sharedArray, 0, 1); // 原子操作
};

使用 Service Worker 实现后台处理

Service Worker 主要用于离线缓存和网络代理,但也能执行后台任务:

// 注册 Service Worker
navigator.serviceWorker.register('sw.js').then(registration => {
  registration.active.postMessage('Start background task');
});

// sw.js
self.addEventListener('message', (event) => {
  // 执行后台任务
});

使用 Worker Pool 管理线程池

对于需要大量并行任务的情况,可以创建线程池管理多个 Worker:

class WorkerPool {
  constructor(size, workerScript) {
    this.workers = Array(size).fill().map(() => new Worker(workerScript));
    this.taskQueue = [];
    this.workerStatus = Array(size).fill(true);
  }
  // ... 实现任务分配逻辑
}

注意事项

  • Worker 中无法直接访问 DOM 或大多数全局对象(如 window
  • 通信通过 postMessage 进行,数据会被结构化克隆算法处理
  • 终止 Worker 使用 worker.terminate()
  • 考虑使用 Transferable Objects 提高大数据传输性能

替代方案:使用异步编程

对于非 CPU 密集型任务,使用 Promise 和 async/await 即可避免阻塞:

async function processData() {
  const result = await cpuIntensiveTask();
  // 处理结果
}

js多线程如何简单实现

标签: 多线程简单
分享给朋友:

相关文章

css3制作简单动画

css3制作简单动画

CSS3 制作简单动画的方法 CSS3 提供了多种方式制作动画,主要通过 transition、transform 和 animation 属性实现。以下是几种常见的实现方法。 使用 transit…

vue实现多线程

vue实现多线程

Vue 中实现多线程的方法 Vue.js 本身是单线程的,但可以通过 Web Workers 或类似技术实现多线程操作。以下是几种常见的方法: 使用 Web Workers Web Workers…

vue实现简单树

vue实现简单树

使用 Vue 实现简单树形结构 递归组件实现 递归组件是 Vue 实现树形结构的常见方式。通过组件调用自身实现无限层级嵌套。 <template> <ul> &l…

vue 实现简单表格

vue 实现简单表格

以下是在 Vue 中实现简单表格的几种方法: 使用原生表格标签 通过 Vue 的数据绑定功能渲染表格数据: <template> <table> <t…

vue修改简单实现

vue修改简单实现

Vue 修改简单实现 在 Vue 中实现简单的修改操作,通常涉及数据绑定、方法调用和响应式更新。以下是几种常见场景的实现方式: 修改数据并更新视图 Vue 的响应式系统会自动追踪数据变化并更新视图…

vue实现简单图片切换

vue实现简单图片切换

以下是在Vue中实现简单图片切换的几种方法: 使用v-bind动态绑定图片路径 通过data属性存储图片数组和当前索引,利用v-bind动态切换src属性: data() { return…