JavaScript多线程编程实践
余琦, 黎智葳, 王玲 译
出版时间:2023年12月
页数:225
“Bryan和Thomas精湛地阐述了多线程开发的基础,并巧妙地说明了各种JavaScript运行时如何实现并行计算。”
——James Snell
Node.js技术指导委员会成员
“这本书正是我在深入研究工作线程时希望阅读的书。它详细且实用,是一本很好的参考书。特别要赞扬其中的分析章节。”
——Matteo Collina
NearForm首席软件架构师
你准备好用JavaScript构建多线程应用程序了吗?通过这本实用的书,中级JavaScript开发者将理解浏览器提供的Web Worker API和Node.js提供的worker线程模块的优点和缺点。
本书作者主要讨论了构建多线程应用的两种方法:一种是使用消息传递,另一种是使用共享内存。你将学习实现每种方法的API,包括根据情况进行选择,以及何时可以结合使用它们。你还将亲自动手实践这些方法构建的高级模式。
● 学习如何从多线程编程中受益。
● 了解专用 worker、共享 worker和服务 worker之间的区别。
● 知道何时以及何时不应该在应用程序中使用多线程。
● 通过利用Atomics对象协调线程之间的通信。
● 应用这些知识来构建高性能的应用程序。
● 从多线程中受益的评估方式。
- 序
- 前言
- 第1章 概述
- 1.1 什么是线程
- 1.2 并发性和并行性
- 1.3 单线程的JavaScript
- 1.4 隐藏的线程
- 1.5 C语言中的线程:用快乐币致富
- 1.5.1 仅用一个主线程
- 1.5.2 使用4个工作线程
- 第2章 浏览器
- 2.1 专用worker
- 2.1.1 专用worker的Hello World
- 2.1.2 专用worker的高级用法
- 2.2 共享worker
- 2.2.1 共享worker的Hello World
- 2.2.2 共享worker的高级用法
- 2.3 service worker
- 2.3.1 service worker的Hello World
- 2.3.2 service worker的高级概念
- 2.4 消息传递的抽象
- 2.4.1 RPC模式
- 2.4.2 命令调度器模式
- 2.4.3 混合模式
- 第3章 Node.js
- 3.1 在拥有线程之前
- 3.2 worker_threads模块
- 3.2.1 workerData
- 3.2.2 MessagePort
- 3.3 再次看快乐币(Happycoin)这个程序
- 3.3.1 单线程版本
- 3.3.2 四个线程的版本
- 3.4 带有Piscina的worker池
- 3.5 一个完整的池化快乐币的例子
- 第4章 共享内存
- 4.1 共享内存简介
- 4.1.1 浏览器中的共享内存
- 4.1.2 在Node.js中的共享内存
- 4.2 SharedArrayBuffer和TypedArrays
- 4.3 数据操作的原子方法
- 4.3.1 Atomics.add()
- 4.3.2 Atomics.and()
- 4.3.3 Atomics.compareExchange()
- 4.3.4 Atomics.exchange()
- 4.3.5 Atomics.isLockFree()
- 4.3.6 Atomics.load()
- 4.3.7 Atomics.or()
- 4.3.8 Atomics.store()
- 4.3.9 Atomics.sub()
- 4.3.10 Atomics.xor()
- 4.4 原子性问题
- 4.5 数据序列化
- 4.5.1 布尔值
- 4.5.2 字符串
- 4.5.3 对象
- 第5章 高级共享内存
- 5.1 原子协调方法
- 5.1.1 Atomics.wait()
- 5.1.2 Atomics.notify()
- 5.1.3 Atomics.waitAsync()
- 5.2 时间和不确定性
- 5.2.1 不确定性的例子
- 5.2.2 检测线程准备情况
- 5.3 示例应用:康威生命游戏
- 5.3.1 单线程生命游戏
- 5.3.2 多线程生命游戏
- 5.4 原子和事件
- 第6章 多线程模式
- 6.1 线程池
- 6.1.1 线程池的大小
- 6.1.2 调度策略
- 6.1.3 应用实例
- 6.2 互斥锁:一个基本的锁
- 6.3 用环形缓冲器处理数据流
- 6.4 演员模型
- 6.4.1 模式差异
- 6.4.2 与JavaScript的关联
- 6.4.3 示例实现
- 第7章 WebAssembly
- 7.1 你的第一个WebAssembly
- 7.2 WebAssembly中的原子操作
- 7.3 用Emscripten将C程序编译成WebAssembly
- 7.4 其他WebAssembly编译器
- 7.5 AssemblyScript
- 7.6 AssemblyScript中的快乐币
- 第8章 分析
- 8.1 何时不使用
- 8.1.1 低内存限制
- 8.1.2 低核心数
- 8.1.3 容器与线程
- 8.2 何时使用
- 8.3 注意事项
- 附录 结构化克隆算法
书名:JavaScript多线程编程实践
译者:余琦, 黎智葳, 王玲 译
国内出版社:中国电力出版社
出版时间:2023年12月
页数:225
书号:978-7-5198-8341-6
原版书书名:Multithreaded Javascript
原版书出版商:O'Reilly Media
Thomas Hunter II
Thomas Hunter II已让Node.js在数十个企业中大放光彩,他现在在为一家致力于让Node.js更加安全的公司工作。他曾在数个关于Node.js和JavaScript的会议上发表讲话,并获得了JSNSD/JSNAD认证,同时他还是NodeSchool SF的组织者之一。
Bryan English
Bryan English是一位开源JavaScript和Rust程序员,他曾在大型企业系统、仪表盘和应用安全方面工作过。作为Datadog的高级开源软件工程师,Bryan是Node.js核心协作者,为多个工作组做出了贡献。
本书封面上的动物是绿翅鸭(学名:Anas crecca)。这种鸭子常见于加拿大北部的湿地和北极森林,在冬天,它会往南方迁移到北美的其他大部分地方。
繁殖期的雄性绿翅鸭有灰色的侧躯和背部,黄色的后部和栗色头上的绿色斑块。它们的名字来源于特别的白边绿色镜羽。雌性绿翅鸭是浅棕色的,看起来和雌性绿头鸭非常相似。绿翅鸭是北美最小的翻浆鸭。它们喜欢浅水,常常在树桩或泥岸上休息。
绿翅鸭是一种相当喧闹的物种,雄性绿翅鸭有清晰的鸣声,而雌鸟有明显的“嘎嘎”叫声。它们主要在泥滩或浅水湿地寻找食物,吃水生和初生植物的种子,茎和叶子。它们的捕食者包括人类,臭鼬,红狐,浣熊,乌鸦和喜鹊。
绿翅鸭当前的保护状态是“最小关注”。O’Reilly封面上的许多动物都处于濒危状态,所有这些动物都对世界至关重要。