协程进阶:同步 05. 粗粒度线程限制 (Coarse-grained)

本篇解析 example-sync-05.kt。探讨一种更高效的单线程环境同步方案。

1. 核心概念:整体限制

与“细粒度”在循环内部切换线程不同,“粗粒度”方案将整个协程任务流都放在同一个单线程内执行。

代码解析

1
2
3
4
5
6
val counterContext = newSingleThreadContext("CounterContext")
withContext(counterContext) { // 整个 massiveRun 都在单线程中
massiveRun {
counter++ // 无需切换,线程安全
}
}
  • 性能提升:由于去掉了频繁的线程切换开销,执行速度远快于方案 04。
  • 结果:Counter = 100000 (准确且高效)。

2. 开发者感悟

这种方案在 UI 开发(如 Android 主线程更新)中非常常见。如果你的业务逻辑本质上就是串行的,且涉及大量状态修改,直接在单线程作用域内运行它是最简单的同步手段。它比加锁更轻快,也更易于理解。

,