代码之家  ›  专栏  ›  技术社区  ›  G S

什么是“紧环”?

  •  61
  • G S  · 技术社区  · 16 年前

    我经常听到这个短语。这是什么意思?

    举个例子会有所帮助。

    7 回复  |  直到 10 年前
        1
  •  43
  •   kennytm    16 年前

    Wiktionary :

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

    对于案例1,可能是

    for (unsigned int i = 0; i < 0xffffffff; ++ i) {}
    
        2
  •  27
  •   Ray    16 年前

    我认为这个短语通常用来指定一个循环,它会重复多次,并且会严重影响程序的性能——也就是说,它可以使用大量的CPU周期。通常在讨论优化时会听到这个短语。

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

        3
  •  8
  •   AndiDog    16 年前

    视频中有一个很好的紧循环(无限循环)的例子 Jon Skeet and Tony the Pony .

    例子是:

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

    它产生一个紧密的循环,因为 IndexOf 忽略unicode零宽字符(从而查找两个相邻空格),但 Replace 不忽略它们(因此不替换任何相邻空间)。

    其他答案已经有了很好的定义,所以我不再提了。

        4
  •  5
  •   SandeepJ    11 年前

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

        5
  •  3
  •   Deepak Mohanty    11 年前

    Sandeepj的答案是在处理数据包的网络设备(例如,请参阅中间箱上的维基百科条目)的上下文中的正确答案。我想补充一点,运行紧密循环的线程/任务试图保持在单个CPU上的计划状态,而不是关闭上下文。

        6
  •  2
  •   Pawel J. Wal    16 年前

    根据韦伯斯特的字典,“一个不释放任何资源给其他程序或操作系统而执行的代码循环。”

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

        7
  •  1
  •   ankapaul    10 年前

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

    while(true)
    {
        //do some processing
    }
    

    这样的循环很可能总是资源密集型的。如果您用这个循环检查进程的CPU和内存使用情况,您会发现它已经启动了。这就是一些人所说的“紧环”。

    推荐文章