第一阶段实现的线程池有一个全局任务队列,所有线程共享一个 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 在核心间飞来飞去)
当任务极短时,取任务的锁竞争比任务本身还耗时。