当前位置:首页 > JavaScript

js实现并发

2026-01-31 20:51:34JavaScript

实现并发的方法

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

Web Workers

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

js实现并发

// 主线程
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

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

js实现并发

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 实现真正的并行处理。

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实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现授权

js实现授权

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