web-dev-qa-db-ja.com

「タイトループ」とは何ですか?

私はそのフレーズをよく聞いた。どういう意味ですか?

例が役立ちます。

70

から ウィクショナリー

  1. (コンピューティング)アセンブリ言語で、命令をほとんど含まず、何度も繰り返すループ。
  2. (コンピューティング)I/Oまたは処理リソースを多用し、オペレーティングシステムで実行されている他のプログラムと適切に共有できないループ。

ケース1の場合、おそらく次のようになります。

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

このフレーズは一般的に、何度も繰り返され、プログラムのパフォーマンスに重大な影響を与える可能性のあるループを指定するために使用されると思います。つまり、多くのCPUサイクルを使用する可能性があります。通常、このフレーズは、最適化の説明で聞きます。

たとえば、ループが画面上のすべてのピクセルを処理する必要があるゲーム、またはループがデータポイントの巨大な配列のエントリを処理する科学アプリについて考えます。

27
Ray

ビデオにタイトなループ(〜無限ループ)の良い例があります Jon Skeet and Tony the Pony

例は次のとおりです。

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

これは、IndexOfがUnicodeのゼロ幅文字を無視する(したがって、2つの隣接するスペースを見つける)ため、タイトなループを生成しますが、Replaceはそれらを無視しません(したがって、隣接するスペースを置き換えません)。

他の答えにはすでに良い定義があるので、それらについては再度触れません。

8
AndiDog

タイトループは、CPUキャッシュフレンドリーなループです。これは、命令キャッシュに収まるループであり、分岐を行わず、処理中のデータのメモリフェッチレイテンシを効果的に隠します。

5
SandeepJ

SandeepJの答えは、パケットを処理するネットワークアプライアンス(例、middleboxのWikipediaエントリを参照)のコンテキストでの正しい答えです。タイトループを実行しているスレッド/タスクが単一のCPUでスケジュールされたままであり、コンテキストが切り替えられないようにしようとすることを付け加えたいと思います。

3
Deepak Mohanty

Websterの辞書によると、「他のプログラムやオペレーティングシステムにリソースを解放せずに実行されるコードのループ」。

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

2
Pawel J. Wal

経験から、無期限に実行されるループを実行しようとしている場合は、たとえば次のようなことに気づきました。

while(true)
{
    //do some processing
}

このようなループは、常にリソースを大量に消費する可能性があります。このループを使用してプロセスによるCPUとメモリの使用状況を確認すると、問題が発生していることがわかります。これは、一部の人が「タイトループ」と呼ぶアイデアです。

1
ankapaul