当前位置:首页 > JavaScript

js实现并发

2026-03-13 18:51:31JavaScript

JavaScript 实现并发的方法

JavaScript 是单线程语言,但可以通过异步编程和 Web Workers 实现并发效果。

异步编程实现并发

使用 Promise.all 可以并行执行多个异步操作:

const promise1 = fetch('https://api.example.com/data1');
const promise2 = fetch('https://api.example.com/data2');

Promise.all([promise1, promise2])
  .then(([response1, response2]) => {
    // 处理两个请求的结果
  })
  .catch(error => {
    // 处理错误
  });

Web Workers 实现真正并发

Web Workers 允许在后台线程运行脚本:

// 主线程
const worker = new Worker('worker.js');
worker.postMessage('start');
worker.onmessage = (event) => {
  console.log('Received:', event.data);
};

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

使用 async/await 控制并发

限制并发数量的实现方式:

js实现并发

async function concurrentRequests(urls, maxConcurrent) {
  const results = [];
  const executing = new Set();

  for (const url of urls) {
    const promise = fetch(url);
    executing.add(promise);
    promise.then(() => executing.delete(promise));

    results.push(await promise);

    if (executing.size >= maxConcurrent) {
      await Promise.race(executing);
    }
  }

  return Promise.all(results);
}

注意事项

  • 浏览器环境有最多 6 个 HTTP 请求的并发限制
  • Node.js 可以使用 worker_threads 模块实现多线程
  • 共享内存需要使用 SharedArrayBuffer 但要小心竞态条件

标签: js
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js防抖和节流实现

js防抖和节流实现

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

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现交换

js实现交换

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

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…