2010-02-06 18 views
51

He escuchado esa frase mucho. Qué significa eso?¿Qué es un "lazo cerrado"?

Un ejemplo ayudaría.

+0

Un contexto en el que lea esto nos ayudaría a entender su pregunta. ¿Podría proporcionar una cita, un enlace o alguna pista? –

+1

Acabo de oír hablar de eso en la oficina. No acabo de registrar el contexto. Supongo que me molestó un poco el hecho de tanto hablar sobre seguir. –

+1

Podría ser que la gente de la oficina está arrojando palabras de moda aleatorias. O no. Podrías preguntarles qué quieren decir. –

Respuesta

38

De Wiktionary:

  1. (informática) En lenguajes ensambladores, un bucle que contiene pocas instrucciones y repite muchas veces.
  2. (informática) Un bucle que utiliza mucho I/O o recursos de procesamiento, fallando para compartirlos adecuadamente con otros programas que se ejecutan en el sistema operativo.

Para el caso 1 es probable que sea como

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

1) El ejemplo no es un ciclo cerrado, es un NOP :) 2) Nunca he visto este significado en mi vida. Suena más como un "cerdo de recursos" –

+0

un compilador inteligente (ish) con algunas optimizaciones inteligentes (ish) se desharán de él. – djh

2

De acuerdo con el diccionario de Webster, "Un bucle de código que se ejecuta sin liberar ningún recurso a otros programas o al sistema operativo".

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

+0

Lo he visto, pero ¿podrías ilustrarlo con un ejemplo? –

+3

En realidad, no estoy de acuerdo con esta definición. como la mayoría de los bucles no liberan tales recursos, implica que la mayoría de los bucles son bucles apretados. –

21

creo que la frase se utiliza generalmente para designar un bucle que itera muchas veces, y que puede tener un grave efecto sobre el rendimiento del programa - que es , puede usar muchos ciclos de CPU. Normalmente escucharía esta frase en una discusión sobre optimización.

Por ejemplo, pienso en juegos, donde un bucle podría necesitar procesar cada píxel en la pantalla, o una aplicación científica, donde un bucle está procesando entradas en grandes conjuntos de puntos de datos.

+2

Una parte del código que se ejecuta con frecuencia puede ser un buen candidato para la optimización, pero no es un ciclo cerrado en general. Incluso si se llama con frecuencia: si la llamada ocurre a través de varias capas de funciones y objetos, no es "ajustada". La condición de bucle y las instrucciones de bucle deben ser realmente ajustadas entre sí, codificar en el mismo archivo y las mismas pocas líneas para un "bucle cerrado". – foo

+0

He escuchado el tipo de ciclo descrito en la respuesta llamado "punto caliente" en un programa, un lugar donde la optimización dirigida dará sus frutos. Por esta misma razón, Sun denominó a su tecnología de compilación justo a tiempo adaptada al perfil "HotSpot". –

+0

@foo: No tienen que estar en el mismo archivo. Los compiladores modernos pueden eliminar capas de abstracciones en nada ... (por ejemplo, plantillas C++) –

7

Hay un buen ejemplo de un ciclo cerrado (~ ciclo infinito) en el video Jon Skeet and Tony the Pony.

El ejemplo es:

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

que produce un bucle estrecho porque IndexOf ignora un carácter de anchura cero Unicode (por lo tanto encuentra dos espacios adyacentes) pero Replace no ignora ellos (por lo tanto no la sustitución de los espacios adyacentes) .

Ya hay buenas definiciones en las otras respuestas, así que no las vuelvo a mencionar.

5

Un bucle cerrado es uno que es compatible con la memoria caché de la CPU. Es un bucle que se adapta a la memoria caché de instrucciones, que no se ramifica y que efectivamente oculta la latencia de recuperación de memoria para los datos que se procesan.

3

La respuesta de SandeepJ es la correcta en el contexto de los dispositivos de red (por ejemplo, ver la entrada de Wikipedia en middlebox) que tratan con paquetes. Me gustaría añadir que el subproceso/tarea que ejecuta el ciclo cerrado intenta permanecer programado en una sola CPU y no se desactiva el contexto.

2

Por experiencia, me he dado cuenta de que si alguna vez usted está tratando de hacer un bucle que se ejecuta de forma indefinida, por ejemplo, algo como:

while(true) 
{ 
    //do some processing 
} 

Tal bucle lo más probable es siempre exige muchos recursos. Si comprueba el uso de CPU y memoria por el proceso con este bucle, verá que se habrá disparado. Tal es la idea que algunas personas llaman un "círculo cerrado".

Cuestiones relacionadas