当前位置:首页 > JavaScript

js 实现线程

2026-03-14 18:29:37JavaScript

JavaScript 是单线程语言,但可以通过以下方式模拟多线程或实现并发操作:

Web Workers

Web Workers 允许在后台运行脚本,独立于主线程执行。创建一个新的 Worker 实例:

js 实现线程

// main.js
const worker = new Worker('worker.js');
worker.postMessage('Hello Worker');

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

SharedArrayBuffer 和 Atomics

共享内存允许 Worker 之间共享数据:

// main.js
const sharedBuffer = new SharedArrayBuffer(16);
const sharedArray = new Int32Array(sharedBuffer);

const worker = new Worker('worker.js');
worker.postMessage({ buffer: sharedBuffer });

Atomics.store(sharedArray, 0, 42);
// worker.js
self.onmessage = function(event) {
  const sharedArray = new Int32Array(event.data.buffer);
  console.log(Atomics.load(sharedArray, 0)); // 42
};

Service Workers

用于离线缓存和网络代理:

js 实现线程

// main.js
navigator.serviceWorker.register('sw.js').then(registration => {
  console.log('ServiceWorker registered');
});
// sw.js
self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request).then(response => {
      return response || fetch(event.request);
    })
  );
});

异步编程模式

使用 Promise 和 async/await 管理异步操作:

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error:', error);
  }
}

定时器

setTimeout 和 setInterval 可用于任务调度:

setTimeout(() => {
  console.log('Delayed execution');
}, 1000);

const intervalId = setInterval(() => {
  console.log('Repeating execution');
}, 2000);

// Clear with clearInterval(intervalId)

注意事项

  • Web Workers 不能直接操作 DOM
  • 大量 Worker 可能消耗系统资源
  • 共享内存需要谨慎处理竞态条件
  • Service Worker 需要 HTTPS 或 localhost 环境

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

相关文章

js实现交换

js实现交换

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

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js 实现全屏

js 实现全屏

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

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…

js 多选 实现

js 多选 实现

实现多选的 JavaScript 方法 使用复选框(Checkbox)实现多选 通过 HTML 的 checkbox 元素配合 JavaScript 实现多选功能。用户可以选择多个选项,提交时获取所有…