Подтвердить что ты не робот

Что такое "плотная петля"?

Я слышал эту фразу много. Что это значит?

Пример поможет.

4b9b3361

Ответ 1

От Wiktionary:

  • (вычисление) В языках ассемблера цикл, который содержит несколько инструкций и повторяется много раз.
  • (вычисление) Такая петля, которая сильно использует ресурсы ввода-вывода или обработки, не позволяет адекватно обмениваться ими с другими программами, запущенными в операционной системе.

Для случая 1 это, вероятно, похоже на

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

Ответ 2

Я думаю, что эта фраза обычно используется для обозначения цикла, который повторяется много раз и который может серьезно повлиять на производительность программы, то есть он может использовать множество циклов процессора. Обычно вы будете слышать эту фразу в обсуждении оптимизации.

В качестве примера я думаю о играх, где цикл может понадобиться обрабатывать каждый пиксель на экране или научное приложение, где цикл обрабатывает записи в гигантских массивах точек данных.

Ответ 3

Хороший пример жесткой петли (бесконечный цикл) в видео Джон Скит и Тони Пони.

Пример:

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

который создает замкнутый цикл, потому что IndexOf игнорирует символ нулевой ширины Unicode (таким образом, находит два смежных пространства), но Replace не игнорирует их (таким образом, не заменяя смежные пространства).

В других ответах уже есть хорошие определения, поэтому я не упоминаю их снова.

Ответ 4

Контейнер с жестким циклом - это тот, который не похож на процессор. Это цикл, который вписывается в кеш команд, который не имеет ветвления и который эффективно скрывает задержку выборки данных для обрабатываемых данных.

Ответ 5

Ответ SandeepJ является правильным в контексте сетевых устройств (например, см. запись в Википедии на промежуточном сервере), которые касаются пакетов. Я хотел бы добавить, что поток/задача, выполняющая узкий цикл, пытается оставаться запланированной на одном CPU и не отключать контекст.

Ответ 6

Согласно словарю Вебстера, "цикл кода, который выполняется без освобождения каких-либо ресурсов для других программ или операционной системы".

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

Ответ 7

Из опыта я заметил, что если вы пытаетесь сделать цикл, который выполняется неопределенно долго, например, что-то вроде:

while(true)
{
    //do some processing
}

Такая петля, скорее всего, всегда будет ресурсоемкой. Если вы проверите использование ЦП и памяти в этом процессе с помощью этого цикла, вы обнаружите, что он будет взлетел. Такова идея, которую некоторые люди называют "узкой петлей".