En un programa, una corrutina es una unidad de tratamiento semejante a una subrutina, con la diferencia de que, mientras que la salida de una subrutina pone fin a esta, la salida de una corrutina puede ser el resultado de una suspensión de su tratamiento hasta que se le indique retomar su ejecución (multitarea cooperativa). La suspensión de la corrutina y su reanudación pueden ir acompañadas de una transmisión de datos.

Las corrutinas permiten realizar tratamientos basados en algoritmos cooperativos como iteradores, generadores, tuberías, etcétera.

Según Donald Knuth, el término corrutina fue inventado por Melvin Conway en 1958, cuando trabajaba en la escritura de un programa en ensamblador.[1]​ Más tarde, Conway propuso organizar un compilador en un conjunto de corrutinas, lo que trajo la posibilidad de utilizar diferentes rutas durante la depuración y de utilizar una sola estructura en producción.[2]

Ventajas editar

  • La corrutina es más liviana, el costo de creación es menor y el consumo de memoria se reduce.
  • El programador de modo de usuario cooperativo reduce la sobrecarga del cambio de contexto de la CPU y mejora la tasa de aciertos de la caché de la CPU

Desventajas editar

  • No puede haber operaciones de bloqueo en la ejecución de la corrutina, de lo contrario se bloquea todo el hilo (la corrutina está en el nivel de idioma, el hilo y el proceso pertenecen al nivel del sistema operativo).
  • Es necesario prestar especial atención al uso de variables globales y referencias a objetos.
  • Las corrutinas pueden manejar la eficiencia de los programas intensivos en E / S, pero procesar programas intensivos en CPU no es su fortaleza.[3]

Véase también editar

Referencias editar

  1. Knuth, Donald Ervin (1997). «1.4.5: History and Bibliography». Fundamental Algorithms. The Art of Computer Programming (en inglés) (3.ª edición). Addison-Wesley. p. 229. ISBN 0-201-89683-4. 
  2. Conway, Melvin E. (julio de 1963). «Design of a separable transition-diagram compiler». Communications of the ACM (en inglés) 6 (7). 
  3. «Sistema operativo (6) -Corutina - programador clic». programmerclick.com. Consultado el 12 de diciembre de 2021.