当前位置:首页 > 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实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js 实现全屏

js 实现全屏

使用 requestFullscreen 方法 通过调用元素的 requestFullscreen 方法可以实现全屏。该方法兼容现代浏览器,但不同浏览器可能需要前缀。 const element =…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…