外观
并发异步篇:并发不是线程+锁那么简单
小螃蟹说
第 15 章学了线程,第 16 章学了 async——但真实项目的并发,坑比想象的深:
- 编译通过,程序卡死(死锁)
- 编译通过,结果是错的(竞态)
- 编译器拦下不该拦的(Send/Sync、async 借用)
- async 世界里混进阻塞(整个服务器一起卡)
这一篇,把并发异步的经典坑逐个拆开:症状 → 诊断 → 解药 → 预防。这是第三卷的收官篇——也是真实项目里最"硬核"的一篇。
这一篇的内容
| 节 | 主题 | 一句话 |
|---|---|---|
| 1 | 死锁 | 两只蚂蚁互相等对方的锁 |
| 2 | Send 与 Sync 报错 | 编译器拦下"不能进线程"的东西 |
| 3 | 锁中毒 | 线程 panic 后,锁会"变味" |
| 4 | async 里的阻塞 | 一个 thread::sleep,卡住整个服务器 |
| 5 | join! 与 select! | 等全部 vs 等最快,选错就白等 |
| 6 | async 借用陷阱 | 'static 要求,借用进不了 async 任务 |
| 7 | 优雅停机 | 关服务器时,让正在干活的线程好好收尾 |
| 8 | 逻辑竞态 | 没有数据竞争,结果照样错 |