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

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

java如何创建线程

java如何创建线程

创建线程的方法 在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js实现 功能

js实现 功能

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