我听过很多这句话。这是什么意思?
一个例子会有所帮助。
来自Wiktionary:
案例1可能是这样
for (unsigned int i = 0; i < 0xffffffff; ++ i) {}
我认为,该短语通常用于指定一个循环,该循环会重复多次,并且可能对程序的性能产生严重影响-也就是说,它会占用大量CPU周期。通常,您会在讨论优化时听到此短语。
例如,我想到游戏,其中循环可能需要处理屏幕上的每个像素,或者科学应用程序,其中循环正在处理庞大的数据点数组中的条目。
[视频Jon Skeet and Tony the Pony中有一个紧密循环(〜无限循环)的好例子。
示例是:
while(text.IndexOf(" ") != -1) text = text.Replace(" ", " ");
这会产生紧密循环,因为IndexOf
忽略Unicode零宽度字符(因此找到两个相邻的空格),但是Replace
却不忽略它们(因此不替换任何相邻的空格)。
其他答案中已经有好的定义,所以我不再赘述。
紧密循环是CPU缓存友好的循环。这是一个适合指令高速缓存的循环,不进行分支,并且有效地隐藏了正在处理的数据的内存提取延迟。
SandeepJ的答案在处理数据包的网络设备(例如,请参阅中间盒上的Wikipedia条目)的上下文中是正确的。我想补充一点,运行紧密循环的线程/任务尝试将调度保持在单个CPU上,而不切换上下文。
根据韦伯斯特的词典,“在不释放任何资源给其他程序或操作系统的情况下执行的代码循环。”
http://www.websters-online-dictionary.org/ti/tight+loop.html
[根据经验,我注意到,如果您尝试做一个无限期运行的循环,例如:
while(true)
{
//do some processing
}
这样的循环很可能总是占用大量资源。如果通过此循环在进程中检查CPU和内存使用情况,您会发现它会急剧增加。有人把这种想法称为“紧密循环”。