我听到过很多话。这是什么意思?
一个例子会有所帮助。
我听到过很多话。这是什么意思?
一个例子会有所帮助。
Answers:
来自维基词典:
对于情况1,可能就像
for (unsigned int i = 0; i < 0xffffffff; ++ i) {}
while (condition == false) {}
更好的例子?
我认为该短语通常用于指定一个循环,该循环会多次迭代,并且可能对程序的性能产生严重影响-也就是说,它会占用大量CPU周期。通常,您会在优化讨论中听到这个短语。
例如,我想到游戏,其中游戏可能需要处理屏幕上的每个像素,或者科学应用程序,其中游戏需要处理庞大的数据点数组中的条目。
视频Jon Skeet和Tony the Pony中有一个很好的例子,它表现为紧密循环(〜无限循环)。
示例是:
while(text.IndexOf(" ") != -1) text = text.Replace(" ", " ");
由于IndexOf
忽略Unicode零宽度字符(因此找到两个相邻的空格)但Replace
不忽略它们(因此不替换任何相邻的空格),因此会产生紧密循环。
其他答案中已经有好的定义,所以我不再赘述。
SandeepJ的答案是在处理数据包的网络设备(例如,请参阅中间盒上的Wikipedia条目)的上下文中的正确答案。我想补充一点,运行紧密循环的线程/任务试图保持调度在单个CPU上,而不切换上下文。
根据韦伯斯特的词典,“在不释放任何资源给其他程序或操作系统的情况下执行的代码循环”。
http://www.websters-online-dictionary.org/ti/tight+loop.html
如今,许多编程环境并未使程序员处于需要紧密循环的条件下,例如Java Web服务在调用代码的容器中运行,并且您需要最小化/消除Servlet实现中的循环。诸如Node.js之类的系统会处理紧密循环,同样,您应该在自己的代码中最小化/消除循环。它们用于完全控制程序执行的情况,例如OS或实时/嵌入式环境。对于OS,您可以将CPU处于空闲状态视为它在紧密循环中所花费的时间,因为紧密循环是执行检查是否需要运行其他进程或是否存在该进程的地方是需要服务的队列,因此,如果没有需要运行的进程且队列为空,则CPU只是在紧密循环中发呆,这在理论上表明了CPU的“不忙”程度。紧密循环应设计为仅执行检查,因此它就像if .. then语句的一大列表,因此在Assembly中它将简化为COMPARE操作数,然后分解为分支,因此非常高效。当所有检查都导致不分支时,紧密循环每秒可以执行数百万次。操作系统/嵌入式系统通常会对CPU占用进行某种检测,以处理某些进程没有放弃对CPU的控制的情况-可以在紧密循环中检查此类事件的发生。最终,您需要了解某个程序需要在某个时候进行循环,否则您将无法对CPU进行任何有用的操作,因此,如果您从未发现需要进行循环,那是因为您的环境为您处理了所有这一切。CPU会一直执行指令,直到没有剩余要执行的指令,否则您将崩溃,因此OS之类的程序必须具有紧密的循环才能真正起作用,否则它将仅运行几微秒。最终,您需要了解某个程序需要在某个时候进行循环,否则您将无法对CPU进行任何有用的操作,因此,如果您从未发现需要进行循环,那是因为您的环境为您处理了所有这一切。CPU会一直执行指令,直到没有剩余要执行的指令,否则您将崩溃,因此OS之类的程序必须具有紧密的循环才能真正起作用,否则它将仅运行几微秒。最终,您需要了解某个程序需要在某个时候进行循环,否则您将无法对CPU进行任何有用的操作,因此,如果您从未发现需要进行循环,那是因为您的环境为您处理了所有这一切。CPU会一直执行指令,直到没有剩余要执行的指令,否则您将崩溃,因此OS之类的程序必须具有紧密的循环才能真正起作用,否则它将仅运行几微秒。