Corrutina
Una función que puede pausarse y continuar más tarde sin bloquear el hilo; Kotlin, Python y otros lenguajes las usan para el código asíncrono.
Una corrutina puede detenerse en un punto (por ejemplo, mientras espera la red) y dejar el hilo libre para otras tareas; cuando llega el resultado, continúa donde lo dejó.
En Kotlin se marcan con suspend y se lanzan con launch o async de la biblioteca kotlinx.coroutines. Las funciones async de Python o JavaScript siguen una idea parecida.
Un ejemplo
Una app Android descarga la lista de pedidos dentro de una corrutina y la pantalla sigue respondiendo mientras tanto.
Por qué importa
Las corrutinas permiten escribir código asíncrono que se lee como si fuera secuencial, pausando una función en un punto y reanudándola más tarde sin bloquear el resto del programa. Son la base de async/await en Python, JavaScript y C#, y de las corrutinas de Kotlin, muy usadas en Android.
Resultan mucho más baratas que los hilos, de modo que puedes tener miles en marcha a la vez. Eso las hace ideales para tareas de entrada y salida, como atender muchas conexiones de red o llamar a varias API a la vez, donde el programa pasa casi todo el tiempo esperando.
Confusiones frecuentes
Una corrutina no se ejecuta en paralelo con las demás: cede el control de forma voluntaria en los puntos de espera, como un await, y mientras tanto otra puede avanzar. Por eso no aceleran el trabajo que consume procesador, solo el que espera. Un error típico en Python es llamar a una función async sin await ni asyncio.run: devuelve un objeto corrutina que nunca llega a ejecutarse, y el intérprete avisa con «coroutine was never awaited». Y una operación bloqueante dentro de una corrutina, como time.sleep, congela a todas las demás.
Preguntas frecuentes
¿Cómo ejecuto una corrutina en Python?
Con asyncio.run(principal()) desde el código normal, y con await desde otra función async.
¿Cómo lanzo varias a la vez?
Con asyncio.gather(a(), b()) en Python o Promise.all en JavaScript, que las ejecutan de forma concurrente y esperan a todas.
Fuentes consultadas
- Coroutines guide (Kotlin)