当前位置:首页 > 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 进行线程间通信。

// 主线程
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 实例。

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 中。

js多线程如何简单实现

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

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

相关文章

简单实现vue github

简单实现vue github

实现 Vue 项目并托管到 GitHub 的步骤 创建 Vue 项目 使用 Vue CLI 快速初始化项目,确保已安装 Node.js 和 npm/yarn。 运行命令: npm init vu…

vue实现简单树

vue实现简单树

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

vue简单代码实现

vue简单代码实现

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

vue怎么实现简单登录

vue怎么实现简单登录

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

css3制作简单动画

css3制作简单动画

CSS3 制作简单动画的方法 CSS3 提供了多种方式制作动画,主要包括 transition 和 animation 两种核心方法。以下是具体实现方式: 使用 transition 实现过渡动画…

网页制作css简单

网页制作css简单

CSS 基础语法 CSS 规则由选择器和声明块组成。选择器指定样式应用的对象,声明块包含属性和值: 选择器 { 属性: 值; 属性: 值; } 示例: p { colo…