编程进阶网 编程进阶网
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机组成原理
  • 操作系统原理
  • 网络协议原理
  • 数据库系统原理
  • 序卷导读
  • 数据本质
  • 运行模型
  • 并发设计
  • 内存真相
  • 交互系统
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 体系建设
  • 代码品质
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 性能优化
  • 数据结构导论
  • 线性结构详解
  • 树哈希结构论
  • 容器设计实战
  • 经典算法思想
  • 工程案例剖析
  • 算法题库精练
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript案例
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 毛选解读
  • 自我精进
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机组成原理
  • 操作系统原理
  • 网络协议原理
  • 数据库系统原理
  • 序卷导读
  • 数据本质
  • 运行模型
  • 并发设计
  • 内存真相
  • 交互系统
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 体系建设
  • 代码品质
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 性能优化
  • 数据结构导论
  • 线性结构详解
  • 树哈希结构论
  • 容器设计实战
  • 经典算法思想
  • 工程案例剖析
  • 算法题库精练
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript案例
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 毛选解读
  • 自我精进
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 序卷方法论

  • 数据的本质

  • 运行时模型

  • 并发的设计

    • README
      • 🎯 这一卷要回答什么
      • 📖 篇章总览(18 篇)
        • 🌱 起源篇
        • 🔥 矛盾篇
        • 🚀 范式篇
        • 🏊 池化结构化篇
      • 🔗 知识脉络
      • 🌉 与其他卷的承接
      • 💡 学完你能回答
      • ⚠️ 学习节奏建议
    • 1.线程前世今生探索
    • 2.并发上下文切换原理
    • 3.线程通信设计思想
    • 4.线程异常设计原理
    • 5.多线程并发经典案例
    • 6.并发Bug源头由来
    • 7.并发编程设计思想
    • 8.并发编程安全设计
    • 9.锁核心设计和思想
    • 10.理解CAS设计由来
    • 11.异步和同步的设计
    • 12.单线程模型的思想
    • 13.协程核心设计思想
    • 14.Actor与CSP并发模型
    • 15.线程池的设计思想
    • 16.线程池设计核心原理
    • 17.线程池使用技巧
    • 18.结构化并发设计思想
  • 内存的真相

  • 交互和系统

  • 内功
  • 并发的设计
杨充
2026-05-14
目录

README

# 第 3 卷|并发之道

专栏分量最重的一卷——18 篇文章,从硬件原子指令到结构化并发,把并发编程半个世纪的进化史完整走一遍。


# 🎯 这一卷要回答什么

并发是程序员永恒的痛点。你也许写过 synchronized、AtomicInteger、async/await、channel,但能回答下面这些"为什么"吗?

  • 线程到底是软件概念还是硬件概念? 没有 OS 之前世界上有没有"线程"?
  • 共享内存和消息传递——为什么 Erlang 选了一条路、Java 选了另一条?两条路真的不能合并吗?
  • 为什么并发 Bug 可以归纳成只有三种(可见性 / 原子性 / 有序性)?
  • CAS 解决了什么矛盾? 为什么硬件层面有了 LOCK#,软件层面还需要循环 CAS?
  • 协程是 1958 年发明的,为什么 2018 年才在 Kotlin / Swift / Java 21 集中爆发?
  • 结构化并发——为什么 Nathaniel Smith 说"goroutine 跟 goto 一样有害"?

这一卷不只是教你"用哪个 API",而是带你看见:每一个并发原语都是某个具体矛盾在某个历史时间点的最优解。


# 📖 篇章总览(18 篇)

# 🌱 起源篇

序号 文档 核心矛盾
3.1 线程前世今生探索 (opens new window) 进程不够用?1:1 / N:1 / M:N 模型如何演进
3.2 并发上下文切换原理 (opens new window) 进程 / 线程 / 协程切换代价的根本差异
3.3 线程通信设计思想 (opens new window) 共享内存 vs 消息传递 —— 两条路线的硬件根因
3.4 线程异常设计原理 (opens new window) 异常从硬件中断到语言层面经历了什么
3.5 多线程并发经典案例 (opens new window) 售票问题:3 行代码引出 3 类 Bug

# 🔥 矛盾篇

序号 文档 核心矛盾
3.6 并发 Bug 源头由来 (opens new window) 可见性 / 原子性 / 有序性 —— 三种 Bug 的硬件根因
3.7 并发编程设计思想 (opens new window) 分工 → 同步 → 互斥,并发的三大命题
3.8 并发编程安全设计 (opens new window) 不可变 / TLS / 读写分离 / 无锁 —— 四种避坑策略
3.9 锁核心设计和思想 (opens new window) 从 LOCK# 指令到 Java 锁升级的完整链路
3.10 理解 CAS 设计由来 (opens new window) 从哲学到硬件,CAS 的 ABA 与解法

# 🚀 范式篇

序号 文档 核心矛盾
3.11 异步和同步的设计 (opens new window) 同步 → 多线程 → 回调 → async/await 的演进
3.12 单线程模型的思想 (opens new window) 单线程为何反而能高并发?
3.13 协程核心设计思想 (opens new window) "挂起 / 恢复" 的机器本质;有栈 vs 无栈
3.14 Actor 与 CSP 并发模型 (opens new window) Erlang 的 Actor vs Go channel 的 CSP

# 🏊 池化结构化篇

序号 文档 核心矛盾
3.15 线程池的设计思想 (opens new window) 池化思想的本质:生产者 - 消费者
3.16 线程池设计核心原理 (opens new window) ctl 变量、状态机、Worker 模型
3.17 线程池使用技巧 (opens new window) 7 大参数调优实战
3.18 结构化并发设计思想 (opens new window) Kotlin / Swift / Java 21 / Trio 让并发"回归大括号"

# 🔗 知识脉络


# 🌉 与其他卷的承接

  • 承接第 2 卷:第 2 卷讲对象布局与调用栈,本卷的"锁升级"恰恰是 mark word 的几个 bit 在做状态机;协程"自己的栈"也是对栈帧的延伸。
  • 通往第 4 卷:内存模型(JMM / C++ MM)是并发原语正确性的基础,将在第 4 卷以"内存"视角重新审视。
  • 通往第 5 卷:第 5 卷"消息机制"本质就是单线程模型 + 事件循环 + 无锁队列。

# 💡 学完你能回答

  • 为什么 volatile 不能保证原子性,但能保证可见性?硬件上是怎么实现的?
  • synchronized 的偏向锁、轻量级锁、重量级锁,性能差距究竟有多少?什么场景该选哪个?
  • async/await 不就是回调的语法糖吗?JVM 字节码层面有什么不同?
  • 为什么 Go 不需要线程池?Goroutine 调度的 GMP 模型究竟解决了什么矛盾?
  • 线程池 corePoolSize、maximumPoolSize、queueCapacity 三者的"死亡组合"是什么?

# ⚠️ 学习节奏建议

这卷信息密度极高,强烈不建议三天打鱼。推荐:

第 1 周:3.1-3.5(起源篇)              循序渐进
第 2 周:3.6-3.10(矛盾篇)             硬核硬啃
第 3 周:3.11-3.14(现代范式)          深入新世界
第 4 周:3.15-3.18(池化 + 结构化)     落地总结

并发是个只能靠理解、不能靠记忆的领域。当你能在脑子里画出"一行代码触发的所有内存屏障 / cache 同步 / OS 调度"时,这一卷才算真正读完。

上次更新: 2026/06/28, 17:55:19
8.异常机制设计原理
1.线程前世今生探索

← 8.异常机制设计原理 1.线程前世今生探索→

最近更新
01
科学方法实践论法
06-28
02
辩证思维矛盾论法
06-28
03
毛选中的调查观念
06-28
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 鄂ICP备2024073355号-1 | 鄂ICP备2024073355号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式