随时就绪:通过委托条件评估实现高效条件变量
分布式、并行与集群计算
2021-05-17 v1
摘要
多线程应用程序通常利用条件变量进行线程间通信。条件变量允许线程阻塞并等待直到某个条件成立,并且使线程能够唤醒其被阻塞的对等线程,通知它们共享数据状态的变化。通常此类通知会发送给所有线程,而只有少数特定线程对其感兴趣。这导致了所谓的无效唤醒,即接收到通知的线程唤醒并恢复执行,却发现它们所等待的条件并不成立,需要再次等待。这些唤醒引起大量上下文切换,增加锁竞争和缓存压力,转化为大量浪费的计算周期和能量。在这项工作中,我们提议将线程所等待的条件委托给发送通知的线程。这使得后者能够评估条件并仅向相关线程发送通知,几乎完全消除了无效唤醒。我们对该想法的初步评估显示出有前景的结果,相比传统条件变量实现了3-4倍的吞吐量提升。
引用
@article{arxiv.2105.06961,
title = {Ready When You Are: Efficient Condition Variables via Delegated Condition Evaluation},
author = {Dave Dice and Alex Kogan},
journal= {arXiv preprint arXiv:2105.06961},
year = {2021}
}