0

0

JavaScript并发编程_Worker线程与共享内存技术

betcha

betcha

发布时间:2025-11-21 21:53:02

|

250人浏览过

|

来源于php中文网

原创

JavaScript通过Web Workers和SharedArrayBuffer实现多线程协作,提升性能。1. Web Workers允许在后台线程执行脚本,不阻塞主线程,适用于耗时计算;2. SharedArrayBuffer提供共享内存,避免数据复制开销,结合Atomics实现原子操作与线程同步;3. 适用于图像处理、游戏物理模拟等CPU密集型任务,但需注意跨域隔离限制与竞态问题。

javascript并发编程_worker线程与共享内存技术

JavaScript 是单线程语言,主线程负责 DOM 渲染、事件处理和脚本执行。当遇到大量计算任务时,容易造成页面卡顿。为解决这一问题,现代浏览器引入了 Web WorkersSharedArrayBuffer 技术,支持真正的并发编程。通过 Worker 线程与共享内存,JavaScript 可以实现多线程协作,提升性能。

Web Workers:实现多线程执行

Web Workers 允许在后台线程中运行脚本,不阻塞主线程。创建的 Worker 拥有独立的执行环境,不能访问 DOM,但可以进行网络请求、定时器操作和复杂计算。

常见 Worker 类型:
  • Dedicated Worker:仅被创建它的脚本使用,一对一通信。
  • Shared Worker:可被同源下多个脚本共享,适用于多页面协同场景。
  • Service Worker:用于拦截网络请求、缓存资源,常用于 PWA。

使用 Dedicated Worker 的基本方式:

// main.js
const worker = new Worker('worker.js');

worker.postMessage('start'); // 向 Worker 发送数据

worker.onmessage = function(e) {
  console.log('接收到结果:', e.data);
};

// worker.js
self.onmessage = function(e) {
  const result = heavyComputation(); // 耗时计算
  self.postMessage(result); // 返回结果
};

主线程与 Worker 通过 postMessageonmessage 机制通信,数据采用结构化克隆算法传递,非共享。

立即学习Java免费学习笔记(深入)”;

SharedArrayBuffer:实现线程间内存共享

默认情况下,Worker 之间的数据传递需要复制,大对象开销大。而 SharedArrayBuffer 提供了一块可被多个线程(主线程与多个 Worker)共享的内存区域,避免数据拷贝,显著提升效率。

Sora
Sora

Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。

下载

结合 Atomics 对象,可在共享内存上实现原子操作,防止数据竞争。

使用示例:
// 创建共享内存(1024 字节)
const sharedBuffer = new SharedArrayBuffer(1024);
const sharedArray = new Int32Array(sharedBuffer);

// 传递共享内存给 Worker
worker.postMessage(sharedArray);

// 在多个线程中可同时读写 sharedArray
// 使用 Atomics 保证操作安全
Atomics.add(sharedArray, 0, 1); // 将索引 0 处的值加 1
Atomics.load(sharedArray, 0);    // 安全读取
Atomics.store(sharedArray, 0, 42); // 安全写入

Atomics 提供 wait/notify 机制,可用于线程同步,类似条件变量。

实际应用场景与注意事项

这种并发模型适用于图像处理、音视频编码、科学计算等 CPU 密集型任务。

典型应用:
  • 图像像素处理:将图像数据放入 SharedArrayBuffer,多个 Worker 分块处理。
  • 游戏引擎物理模拟:主线程渲染,Worker 执行碰撞检测。
  • 大数据分析:Worker 并行处理数组片段,结果汇总。
需要注意的问题:
  • SharedArrayBuffer 在某些浏览器或跨域环境下受限,需启用跨域隔离(Cross-Origin Isolation)。
  • 必须配合 Atomics 进行同步,否则会出现竞态条件。
  • 调试多线程逻辑较困难,建议模块化设计并充分测试。

基本上就这些。合理使用 Worker 与共享内存,能让 JavaScript 在高负载场景下依然保持流畅响应。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

765

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

377

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

32

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

29

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

103

2026.02.06

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

377

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

32

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

29

2026.01.21

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号