我想通过用自旋锁替换一些互斥锁来提高程序的性能。中找到了一个自旋锁实现。
我打算重新使用。我相信这个实现比简单的实现更安全,在这种实现中,线程一直在尝试,就像这里所发现的那样。
但是我需要澄清一些关于这里发现的产量函数的东西
首先,我可以假设数字4,16,32是任意的。实际上,我测试了一些其他的值,我发现在我的情况下,我通过使用其他值获得了最好的性能。
但是有人能解释一下屈服码背后的推理吗。特别是为什么我们需要这三个
BOOST_SMT_PAUSEsched_yield和nanosleep发布于 2018-03-12 16:09:29
是的,这个概念被称为“自适应自旋锁”-参见例如https://lwn.net/Articles/271817/。
通常选择的数字是指数后退:https://geidav.wordpress.com/tag/exponential-back-off/。
所以,这些数字不是任意的。但是,哪个“数字”可以用于您的情况,取决于您的应用程序模式、需求和系统资源。
引入“微延迟”的三种方法明确地旨在平衡成本和潜在收益:
yield可能允许操作系统根据其他系统负载来避免上下文切换(例如,如果线程数<逻辑核数)在上下文切换或缓存丢失的影响很大的低延迟应用程序中,它们之间的权衡是非常重要的。
TL;DR
所有的权衡都试图在浪费CPU周期和失去缓存/线程效率之间找到平衡。
https://stackoverflow.com/questions/49232620
复制相似问题