当前位置:首页 > 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 实现线程安全操作:

js多线程如何简单实现

// 主线程
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 主要用于离线缓存和网络代理,但也能执行后台任务:

js多线程如何简单实现

// 注册 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();
  // 处理结果
}

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

相关文章

vue 简单实现

vue 简单实现

Vue 简单实现 Vue 是一个渐进式 JavaScript 框架,适合快速构建用户界面。以下是实现一个简单 Vue 应用的步骤: 安装 Vue 通过 CDN 引入 Vue 是最简单的方式: &…

vue 实现简单表格

vue 实现简单表格

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

vue修改简单实现

vue修改简单实现

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

vue实现简单的store

vue实现简单的store

Vue 实现简单的 Store 在 Vue 中可以通过多种方式实现简单的状态管理(Store),以下介绍几种常见方法: 使用 Vue 的响应式 API 通过 reactive 或 ref 创建响应式…

vue怎么实现简单登录

vue怎么实现简单登录

Vue实现简单登录功能 使用Vue 2或Vue 3均可实现基础登录逻辑,以下是关键实现步骤: 创建登录表单组件 在Login.vue中设置用户名和密码输入框,绑定v-model数据: <te…

react 简单table实现

react 简单table实现

基础表格实现 使用 React 实现简单表格可以通过原生 HTML 的 <table> 标签结合动态数据渲染完成。以下是一个基础示例,展示如何通过数组数据动态生成表格内容: impo…