什么是“紧密循环”?
我听了很多这句话。 这是什么意思?
一个例子会有所帮助。
维基词典 :
- (计算)在汇编语言中,一个包含很less指令并循环多次的循环。
- (计算)这种大量使用I / O或处理资源的循环,无法与运行在操作系统中的其他程序充分共享。
对于情况1,可能是这样的
for (unsigned int i = 0; i < 0xffffffff; ++ i) {}
我认为这个词通常被用来指定一个迭代次数很多的循环,这会对程序的性能产生严重的影响 – 也就是说,它可以使用大量的CPU周期。 通常你会在优化的讨论中听到这个短语。
例如,我想到的是游戏,一个循环可能需要处理屏幕上的每个像素,或者科学应用程序,一个循环正在处理巨大的数据点arrays中的条目。
在videoJon Skeet和Tony the Pony中,有一个很好的例子(无限循环)。
例子是:
while(text.IndexOf(" ") != -1) text = text.Replace(" ", " ");
由于IndexOf
忽略Unicode零宽度字符(因此find两个相邻的空格),但是Replace
不会忽略它们(因此不会replace任何相邻的空格),因此会产生紧密的循环。
在其他答案中已经有了很好的定义,所以我不再提及它们。
一个紧密的循环是一个CPUcaching友好的。 这是一个适合指令caching的循环,它不分支,并且有效地隐藏正在处理的数据的内存读取延迟。
SandeepJ的答案在处理数据包的networking设备环境中是正确的(例如,参见维基百科中间件条目)。 我想补充一点,运行紧密循环的线程/任务试图在单个CPU上保持调度,并且不会切换上下文。
根据韦伯斯特的字典,“执行代码循环,而不会释放任何资源给其他程序或操作系统”。
http://www.websters-online-dictionary.org/ti/tight+loop.html
从经验来看,我注意到如果你试图做一个无限期运行的循环,比如:
while(true) { //do some processing }
这样一个循环最有可能永远是资源密集型的。 如果你通过这个循环检查CPU和内存的使用情况,你会发现它会出现。 这就是一些人所说的“紧密的循环”的想法。