Corrutina
# Corrutina

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. 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.

### Ventajas

* 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

* 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.
