我曾多次向 D 编程语言运行时的维护者建议内存分配器/垃圾收集器应该使用自旋锁而不是常规的操作系统临界区。这还没有真正流行起来。以下是我认为自旋锁会更好的原因:
- 至少在我所做的综合基准测试中,当内存分配器/GC 锁发生争用时,它比操作系统关键部分快几倍。编辑:根据经验,在单核环境中使用自旋锁甚至没有可测量的开销,可能是因为锁需要在内存分配器中保持如此短的时间。
- 内存分配和类似操作通常只占用时间片的一小部分,甚至是上下文切换所需时间的一小部分,这使得在争用情况下进行上下文切换变得很愚蠢。
- 无论如何,有问题的实现中的垃圾收集会阻止世界。收集期间不会有任何旋转。
是否有充分的理由不在内存分配器/垃圾收集器实现中使用自旋锁?