当前位置:首页 > JavaScript

js实现并发

2026-01-31 20:51:34JavaScript

实现并发的方法

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

Web Workers

Web Workers 允许在后台线程中运行脚本,避免阻塞主线程。适用于 CPU 密集型任务。

// 主线程
const worker = new Worker('worker.js');
worker.postMessage({ data: 'some data' });
worker.onmessage = (e) => {
  console.log('Message from worker:', e.data);
};

// worker.js
self.onmessage = (e) => {
  const result = processData(e.data);
  self.postMessage(result);
};

Promise 和 async/await

利用异步编程模型处理并发任务,适用于 I/O 密集型操作。

async function fetchConcurrently(urls) {
  const promises = urls.map(url => fetch(url));
  const responses = await Promise.all(promises);
  return Promise.all(responses.map(res => res.json()));
}

setTimeout/setInterval

通过事件循环模拟并发,适合简单的定时任务。

function task1() {
  console.log('Task 1');
  setTimeout(task1, 1000);
}

function task2() {
  console.log('Task 2');
  setTimeout(task2, 1500);
}

task1();
task2();

SharedArrayBuffer 和 Atomics

用于真正的内存共享并发,但需要谨慎使用以避免竞态条件。

const sharedBuffer = new SharedArrayBuffer(16);
const sharedArray = new Int32Array(sharedBuffer);

// 线程1
Atomics.store(sharedArray, 0, 123);

// 线程2
const value = Atomics.load(sharedArray, 0);

Cluster 模块 (Node.js)

在 Node.js 中利用多核 CPU 实现真正的并行处理。

js实现并发

const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  const cpus = os.cpus().length;
  for (let i = 0; i < cpus; i++) {
    cluster.fork();
  }
} else {
  // Worker代码
  require('./server');
}

注意事项

  • Web Workers 无法直接访问 DOM
  • 共享内存操作需要同步机制
  • 异步代码要注意错误处理
  • Node.js 集群需要处理进程间通信

选择合适的方法取决于具体应用场景和性能需求。I/O 密集型任务适合异步模式,CPU 密集型任务应考虑 Web Workers 或集群。

标签: js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…