什么是“紧密循环”?

问题描述 投票:64回答:7

我听过很多这句话。这是什么意思?

一个例子会有所帮助。

terminology
7个回答
45
投票

来自Wiktionary

  1. ((计算),在汇编语言中,这是一个包含很少指令并进行多次迭代的循环。
  2. ((计算)这样的循环,该循环大量使用I / O或处理资源,无法与操作系统中运行的其他程序充分共享它们。

案例1可能是这样

for (unsigned int i = 0; i < 0xffffffff; ++ i) {}

27
投票

我认为,该短语通常用于指定一个循环,该循环会重复多次,并且可能对程序的性能产生严重影响-也就是说,它会占用大量CPU周期。通常,您会在讨论优化时听到此短语。

例如,我想到游戏,其中循环可能需要处理屏幕上的每个像素,或者科学应用程序,其中循环正在处理庞大的数据点数组中的条目。


9
投票

[视频Jon Skeet and Tony the Pony中有一个紧密循环(〜无限循环)的好例子。

示例是:

while(text.IndexOf("  ") != -1) text = text.Replace("  ", " ");

这会产生紧密循环,因为IndexOf忽略Unicode零宽度字符(因此找到两个相邻的空格),但是Replace却不忽略它们(因此不替换任何相邻的空格)。

其他答案中已经有好的定义,所以我不再赘述。


6
投票

紧密循环是CPU缓存友好的循环。这是一个适合指令高速缓存的循环,不进行分支,并且有效地隐藏了正在处理的数据的内存提取延迟。


3
投票

SandeepJ的答案在处理数据包的网络设备(例如,请参阅中间盒上的Wikipedia条目)的上下文中是正确的。我想补充一点,运行紧密循环的线程/任务尝试将调度保持在单个CPU上,而不切换上下文。


2
投票

根据韦伯斯特的词典,“在不释放任何资源给其他程序或操作系统的情况下执行的代码循环。”

http://www.websters-online-dictionary.org/ti/tight+loop.html


1
投票

[根据经验,我注意到,如果您尝试做一个无限期运行的循环,例如:

while(true)
{
    //do some processing
}

这样的循环很可能总是占用大量资源。如果通过此循环在进程中检查CPU和内存使用情况,您会发现它会急剧增加。有人把这种想法称为“紧密循环”。

© www.soinside.com 2019 - 2024. All rights reserved.