首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“优化延迟”是一个神话还是真的?

“优化延迟”是一个神话还是真的?
EN

Stack Overflow用户
提问于 2009-06-29 13:42:42
回答 3查看 560关注 0票数 4

你不时会听到一些故事,这些故事旨在说明某人在某件事情上有多优秀,有时你也会听到他对代码优化的兴趣,以至于他优化了自己的延迟循环。

因为这听起来真的很奇怪,因为启动一个“计时器中断”比一个优化的热门等待要好得多,而且从来没有人会告诉你优化黑客的名字。

这让我想知道这到底是一个城市神话还是真的?

你说什么,现实还是虚构?

谢谢约翰

Update:听起来ShuggyCoUk在做些什么,不知道我们能不能找到一个例子。

Update:稍微澄清一下,这个问题是关于“延迟”函数本身以及它是如何实现的,而不是如何和在何处调用它。这个目的是什么,以及系统是如何变得更好的。

Update:这不是神话,那些家伙似乎存在

谢谢ShuggyCoUk

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-30 10:37:18

这不仅仅是事实的核心.

自旋等待比基于信号的中断或屈服要好得多。

  • 您用一些吞吐量来换取大大减少的延迟。
    • 在操作系统本身中,这通常是至关重要的。

  • 您可以允许自己在中断处理程序中执行不可能的操作。
    • 例如,内存分配。

  • 您可以得到更细粒度的间隔控制,因为您基本上可以度量周期计数。

然而,旋转等待是很难得到正确的。

  • 如果可以的话,应该使用适当的空闲指令:
    • 可以关闭部分核心,改善能源使用/散热,甚至允许其他核心运行更快。
    • 在基于超线程的CPU中,您可以使用允许其他逻辑线程在旋转时使用完整的CPU管道。
    • 您可能认为没有操作的指令可能会导致CPU通过超级标量执行单元按顺序执行它们。由此产生的代码可能会出现不可预见的无序伪制品,这会迫使CPU在不需要的暂停和内存屏障方面进行大量的工作。

这就是为什么在大多数情况下你让别人为你写旋转等待循环的原因。

  • 在Linux中有一个放松宏
代码语言:javascript
复制
- on arm this is barrier()
- on x86 this is rep\_nop()

  • 在Windows中有YieldProcessor
代码语言:javascript
复制
- Accessible in .Net via [Thread.SpinWait](http://msdn.microsoft.com/en-us/library/system.threading.thread.spinwait.aspx)

  • 除非您在内核中,否则OS X 避免提供标准的实现
代码语言:javascript
复制
- see [this document](http://developer.apple.com/documentation/Darwin/Conceptual/KernelProgramming/synchronization/synchronization.html#//apple_ref/doc/uid/TP30000905-CH218-BEHJDFCA) and note that it encourages the use only of lck\_spin\_t

至于一些使用暂停进行旋转等待的引用:

  • PostGresSQL
  • Linux
    • 还请注意,由于功率减少,这对非P4也更好。

票数 4
EN

Stack Overflow用户

发布于 2009-06-29 13:49:42

我经常听到的版本是一群硬件程序员,他们开发了一种特殊的指令来优化他们操作系统的空闲(非繁忙)循环。在克尼汉和派克的书 中提到了这一点,即编程的实践,但即使在那里,他们也承认这可能是一个城市神话。

票数 2
EN

Stack Overflow用户

发布于 2009-06-29 20:25:31

我听说过一些程序员的故事,他们故意在项目的早期放置长延迟循环,然后将其作为“优化”,以给管理留下深刻印象。不知道这些故事是不是假的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1058390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档