当前位置:首页 > JavaScript

js线程实现

2026-02-01 02:20:21JavaScript

JavaScript 线程实现方法

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

Web Workers

Web Workers 允许在后台线程中运行脚本,不会影响主线程的性能。

js线程实现

// 主线程代码
const worker = new Worker('worker.js');
worker.postMessage('Hello Worker');

worker.onmessage = function(e) {
  console.log('Message received from worker', e.data);
};

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

Service Workers

Service Workers 是运行在浏览器后台的脚本,可以拦截网络请求、缓存资源等。

// 注册 Service Worker
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js')
    .then(registration => {
      console.log('ServiceWorker registration successful');
    });
}

SharedArrayBuffer 和 Atomics

共享内存和原子操作可以实现真正的多线程数据共享。

js线程实现

// 主线程
const sharedBuffer = new SharedArrayBuffer(1024);
const sharedArray = new Int32Array(sharedBuffer);

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

// worker.js
self.onmessage = function(e) {
  const sharedArray = new Int32Array(e.data.buffer);
  Atomics.add(sharedArray, 0, 1);
};

Node.js 工作线程

Node.js 提供了 worker_threads 模块实现多线程。

const { Worker, isMainThread } = require('worker_threads');

if (isMainThread) {
  const worker = new Worker(__filename);
  worker.on('message', (msg) => {
    console.log(msg);
  });
} else {
  parentPort.postMessage('Hello from worker');
}

异步编程

虽然不创建新线程,但 async/await 和 Promise 可以实现非阻塞操作。

async function fetchData() {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  return data;
}

这些方法各有适用场景:Web Workers 适合 CPU 密集型任务,Service Workers 适合离线应用和缓存,Node.js 工作线程适合服务器端并行处理,异步编程则适合 I/O 密集型操作。

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

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…