当前位置:首页 > JavaScript

js多线程如何简单实现

2026-04-03 19:10:51JavaScript

使用 Web Workers

Web Workers 是浏览器提供的多线程 API,允许在后台线程中运行 JavaScript 代码,避免阻塞主线程。

// 主线程代码
const worker = new Worker('worker.js');

worker.postMessage({ data: 'Hello from main thread' });

worker.onmessage = (event) => {
  console.log('Message from worker:', event.data);
};

// worker.js 文件
self.onmessage = (event) => {
  console.log('Message from main thread:', event.data);
  self.postMessage({ data: 'Hello from worker' });
};

使用 SharedArrayBuffer 和 Atomics

对于需要共享内存的多线程场景,可以使用 SharedArrayBuffer 和 Atomics API 进行线程间通信。

js多线程如何简单实现

// 主线程
const sharedBuffer = new SharedArrayBuffer(1024);
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 Workers

Service Workers 主要用于离线缓存和网络请求拦截,但也可以实现类似多线程的效果。

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

// sw.js
self.addEventListener('message', event => {
  console.log('Message received in Service Worker:', event.data);
});

使用 Worker Pool 模式

对于需要大量并行任务的情况,可以创建 Worker 池来管理多个 Worker 实例。

js多线程如何简单实现

class WorkerPool {
  constructor(size, workerScript) {
    this.pool = [];
    for (let i = 0; i < size; i++) {
      this.pool.push(new Worker(workerScript));
    }
  }

  getWorker() {
    return this.pool.pop();
  }

  releaseWorker(worker) {
    this.pool.push(worker);
  }
}

注意事项

浏览器中的多线程与传统的多线程编程有所不同,Worker 线程无法直接访问 DOM,需要通过 postMessage 进行通信。

Worker 脚本必须是与主页面同源的单独文件,不能直接内联在 HTML 中。

对于计算密集型任务,使用 Web Workers 可以显著提高页面响应性能,但线程间通信会有一定开销。

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

相关文章

vue 简单实现

vue 简单实现

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

js多线程如何简单实现

js多线程如何简单实现

JavaScript 多线程的简单实现方法 JavaScript 本身是单线程的,但可以通过 Web Workers 实现多线程操作。Web Workers 允许在后台运行脚本,独立于主线程执行任务。…

vue实现简单拖拽

vue实现简单拖拽

Vue 实现简单拖拽功能 在 Vue 中实现拖拽功能可以通过 HTML5 的拖放 API 或第三方库(如 vuedraggable)来完成。以下是两种常见的实现方式: 使用 HTML5 拖放 API…

vue简单实现删除

vue简单实现删除

Vue 删除功能实现 使用 v-for 和 splice 方法删除数组元素 <template> <div> <ul> <li v-…

vue简单代码实现

vue简单代码实现

以下是一个基于 Vue 3 的简单代码实现示例,包含基础功能演示: 基础模板结构 <!DOCTYPE html> <html lang="en"> <head>…

vue实现简单图片切换

vue实现简单图片切换

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