当前位置:首页 > JavaScript

js 实现线程

2026-04-06 12:17:42JavaScript

在 JavaScript 中,由于语言本身的单线程特性,无法直接创建传统意义上的线程(如 Java 或 C++ 中的多线程)。但可以通过以下方式模拟多线程行为或实现并行处理:

Web Worker

Web Worker 是浏览器提供的 API,允许在后台运行脚本,独立于主线程。适用于 CPU 密集型任务。

// 主线程代码
const worker = new Worker('worker.js');
worker.postMessage({ data: '任务数据' });

worker.onmessage = (event) => {
  console.log('收到 Worker 结果:', event.data);
};
// worker.js
self.onmessage = (event) => {
  const result = heavyComputation(event.data); // 耗时计算
  self.postMessage(result);
};

Service Worker

主要用于离线缓存和网络请求拦截,运行在独立线程,但生命周期由浏览器控制。

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

异步编程

通过 Promiseasync/await 实现非阻塞操作,模拟并发效果。

async function fetchData() {
  const [data1, data2] = await Promise.all([
    fetch('/api/data1'),
    fetch('/api/data2')
  ]);
  console.log(data1, data2);
}

SharedArrayBuffer + Atomics

通过共享内存实现多线程数据共享(需注意线程安全问题)。

js 实现线程

// 主线程
const sharedBuffer = new SharedArrayBuffer(1024);
worker.postMessage({ buffer: sharedBuffer });

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

注意事项

  • Web Worker 无法直接操作 DOM
  • 线程间通信需通过 postMessage 序列化数据
  • Service Worker 需 HTTPS 环境(本地开发除外)

标签: 线程js
分享给朋友:

相关文章

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…

js尚未实现

js尚未实现

JavaScript 尚未实现的功能 JavaScript 作为一门不断发展的语言,仍有一些功能尚未被原生支持或标准化。以下是一些常见的尚未实现的功能或特性: Promise.any() 的替代方案…