| 对比 | 全局队列 | Work-Stealing |
|---|---|---|
| 实现复杂度 | 简单 | 复杂 |
| 每个任务的取队列开销 | 1 次锁争用 | 极少争用(自己队列无竞争) |
| 负载均衡 | 自然均衡(谁抢到谁做) | 需要偷取来均衡 |
| 缓存局部性 | 差(任务被随机线程执行) | 好(自己入队的任务自己执行) |
| 适用场景 | 任务执行时间不固定 | 任务短小、频率高 |
什么时候用 Work-Stealing?
你的 SimpleAsyncLogger 那种场景——生产者线程写入日志(微任务),刷盘线程消费——是 SPSC,不需要 Work-Stealing。Work-Stealing 真正有用的是计算密集型的、任务大量且短小的并行计算,比如浏览器渲染引擎(Chromium 的 Blink 线程池就是 Work-Stealing)。