J'ai beaucoup entendu cette phrase. Qu'est-ce que ça veut dire?
Un exemple serait utile.
De Wiktionnaire :
Pour le cas 1, c'est probablement comme
for (unsigned int i = 0; i < 0xffffffff; ++ i) {}
Je pense que l'expression est généralement utilisée pour désigner une boucle qui itère plusieurs fois et qui peut avoir un effet sérieux sur les performances du programme - c'est-à-dire qu'elle peut utiliser beaucoup de cycles CPU. Habituellement, vous entendez cette phrase dans une discussion sur l'optimisation.
Par exemple, je pense au jeu, où une boucle peut avoir besoin de traiter chaque pixel de l'écran, ou à une application scientifique, où une boucle traite des entrées dans des tableaux géants de points de données.
Il y a un bon exemple d'une boucle serrée (~ boucle infinie) dans la vidéo Jon Skeet et Tony the Pony .
L'exemple est:
while(text.IndexOf(" ") != -1) text = text.Replace(" ", " ");
qui produit une boucle serrée car IndexOf
ignore un caractère Unicode de largeur nulle (trouve donc deux espaces adjacents) mais Replace
ne les ignore pas (ne remplaçant ainsi aucun espace adjacent).
Il y a déjà de bonnes définitions dans les autres réponses, donc je ne les mentionne plus.
Une boucle serrée est une boucle compatible avec le cache du processeur. Il s'agit d'une boucle qui tient dans le cache d'instructions, qui ne fait pas de branchement et qui masque efficacement la latence de récupération de la mémoire pour les données en cours de traitement.
La réponse de SandeepJ est la bonne dans le contexte des appliances réseau (par exemple, voir l'entrée Wikipedia sur le boîtier de médiation) qui traitent des paquets. Je voudrais ajouter que le thread/la tâche exécutant la boucle étroite tente de rester planifié sur un seul processeur et de ne pas désactiver le contexte.
Selon le dictionnaire de Webster, "Une boucle de code qui s'exécute sans libérer de ressources vers d'autres programmes ou le système d'exploitation."
http://www.websters-online-dictionary.org/ti/tight+loop.html
Par expérience, j'ai remarqué que si jamais vous essayez de faire une boucle qui s'exécute indéfiniment, par exemple quelque chose comme:
while(true)
{
//do some processing
}
Une telle boucle sera très probablement toujours gourmande en ressources. Si vous vérifiez l'utilisation du CPU et de la mémoire par le processus avec cette boucle, vous constaterez qu'elle aura augmenté. Telle est l'idée que certains appellent une "boucle étroite".