协程进阶:同步 04. 细粒度线程限制 (Fine-grained)

本篇解析 example-sync-04.kt。探讨一种利用单线程环境解决并发冲突的方案。

1. 核心概念:单一线程限制

如果所有的修改操作都发生在一个固定的单线程内,那么并发冲突就自然消失了。

代码解析

1
2
3
4
5
6
val counterContext = newSingleThreadContext("CounterContext")
massiveRun {
withContext(counterContext) { // 每次加法都切回单线程
counter++
}
}
  • 代价:由于每次加法都要从多线程池切回单线程,再切回去,性能开销极大

2. 开发者感悟

这种细粒度的切换(在循环内部 withContext)是非常低效的。在实际开发中,我们应该尽量避免在高频循环中切换线程。这种方案虽然结果准确,但速度非常慢。

,