Я багато чув цю фразу. Що це означає?
Приклад може допомогти.
Я багато чув цю фразу. Що це означає?
Приклад може допомогти.
Відповіді:
З Вікісловника :
Для випадку 1 це, мабуть, подібне
for (unsigned int i = 0; i < 0xffffffff; ++ i) {}
while (condition == false) {}
кращий приклад?
Я думаю, що фраза зазвичай використовується для позначення циклу, який повторюється багато разів і який може мати серйозний вплив на продуктивність програми - тобто вона може використовувати багато циклів процесора. Зазвичай ви можете почути цю фразу під час обговорення питань оптимізації.
Для прикладів я думаю про ігри, де цикл може потребувати обробки кожного пікселя на екрані, або науковий додаток, де цикл обробляє записи у гігантських масивах точок даних.
У відео є хороший приклад щільного циклу (~ нескінченний цикл) Джон Скіт і Тоні Поні .
Приклад:
while(text.IndexOf(" ") != -1) text = text.Replace(" ", " ");
який створює щільний цикл, оскільки IndexOf
ігнорує символ нульової ширини Unicode (таким чином знаходить два сусідні пробіли), але Replace
не ігнорує їх (таким чином, не замінюючи сусідні пробіли).
В інших відповідях вже є хороші визначення, тому я їх більше не згадую.
Відповідь SandeepJ є правильною у контексті мережевих пристроїв (наприклад, див. Запис Вікіпедії в середньому вікні), які мають справу з пакетами. Я хотів би додати, що потік / завдання, що запускає вузький цикл, намагається залишатись запланованим на одному центральному процесорі і не вимикати контекст.
Згідно зі словником Вебстера, "цикл коду, який виконується без випуску ресурсів для інших програм або операційної системи".
http://www.websters-online-dictionary.org/ti/tight+loop.html
З досвіду я помітив, що якщо ви коли-небудь намагаєтесь виконати цикл, який працює необмежено довго, наприклад, щось на зразок:
while(true)
{
//do some processing
}
Такий цикл, швидше за все, завжди буде ресурсомістким. Якщо ви перевірите використання процесора та пам’яті процесом за допомогою цього циклу, то виявите, що він зник. Таку ідею деякі люди називають "щільною петлею".
Багато середовищ програмування сьогодні не піддають програміста умовам, які потребують жорсткого циклу, наприклад, веб-служби Java працюють у контейнері, який викликає ваш код, і вам потрібно мінімізувати / усунути цикли в реалізації сервлета. Такі системи, як Node.js, обробляють жорсткий цикл, і знову вам слід мінімізувати / усунути цикли у власному коді. Вони використовуються в тих випадках, коли ви повністю контролюєте виконання програми, наприклад ОС або реальне час / вбудовані середовища. У випадку з ОС, ви можете уявити, що центральний процесор перебуває в режимі очікування, як кількість часу, який він проводить у тісному циклі, оскільки саме туди він виконує перевірки, чи потрібно запускати інші процеси, чи є - це черги, які потребують обслуговування, тому, якщо немає процесів, які потрібно запускати, а черги порожні, тоді центральний процесор просто звикає по цілому циклу, і це дає умовне вказівку на те, наскільки CPU “не зайнятий”. Тісний цикл повинен бути спроектований як просто виконання перевірок, тому він стає просто великим списком операторів if .. then, тому в Асамблеї він зводиться до операнда COMPARE, а потім гілки, тому він є дуже ефективним. Коли всі перевірки призводять до не розгалуження, щільний цикл може виконуватися мільйони разів на секунду. Операційні / вбудовані системи, як правило, мають певне виявлення для обробки процесора, щоб обробляти випадки, коли якийсь процес не відмовився від управління процесором - перевірки такого типу випадків можуть виконуватися в умовах жорсткого циклу. Зрештою, ви повинні розуміти, що програма в певний момент повинна мати цикл, інакше ви не зможете зробити нічого корисного з центральним процесором, тому, якщо ви ніколи не бачите потреби в циклі, це тому, що ваше середовище все це обробляє за вас. Процесор продовжує виконувати інструкції, поки не залишиться нічого виконати або ви не отримаєте збій, тому програма, така як ОС, повинна мати щільний цикл, щоб фактично функціонувати, інакше вона працювала б лише мікросекунди. Зрештою, ви повинні розуміти, що програма в певний момент повинна мати цикл, інакше ви не зможете зробити нічого корисного з центральним процесором, тому, якщо ви ніколи не бачите потреби в циклі, це тому, що ваше середовище все це обробляє за вас. Процесор продовжує виконувати інструкції, поки не залишиться нічого виконати або ви не отримаєте збій, тому програма, така як ОС, повинна мати щільний цикл, щоб насправді функціонувати, інакше вона працювала б лише мікросекунди. Зрештою, ви повинні розуміти, що програма в певний момент повинна мати цикл, інакше ви не зможете зробити нічого корисного з центральним процесором, тому, якщо ви ніколи не бачите потреби в циклі, це тому, що ваше середовище все це обробляє за вас. Процесор продовжує виконувати інструкції, поки не залишиться нічого виконати або ви не отримаєте збій, тому програма, така як ОС, повинна мати щільний цикл, щоб фактично функціонувати, інакше вона працювала б лише мікросекунди.