文档目录

第一阶段实现的线程池有一个全局任务队列,所有线程共享一个 mutex。

当任务数量很大、每个任务执行时间极短时:

线程 1:          线程 2:          线程 3:
🔒 lock()        🔒 lock()        🔒 lock() ← 等着
| 取任务          | 等着             | 等着
🔓 unlock()       ...               ...
执行任务          🔒 lock()         🔒 lock()
                  | 取任务           | 等着
                  🔓 unlock()        ...
                  执行任务           🔒 lock()
                                     ...

perf 表现(100M 个微任务,每个 1μs):

context-switches: 几乎为 0(没有阻塞)
但:mutex 的 cache line bouncing 很严重
cache-misses: 非常高(mutex 在核心间飞来飞去)

当任务极短时,取任务的锁竞争比任务本身还耗时。