https://drive.google.com/file/d/1NJDuBDZwO_v56kmdffH0gfTYKIAUYinM/view
Problema
Si una app va creando muchos threads, cada uno puede tener 100kb de stack. Puede ser un problema la demanda de memoria.
Solución
Se puede usar Tareas asincrónicas de Rust para intercalar tareas en un único thread o en un pool de threads.
- Son mucho más livianas que los threads.
- Más rápidas de crear, más eficiente de pasarle el control a ellas.
- Menor overhead de memoria.
→ Se puede tener miles o decenas de miles en un programa.
El código asincrónico luce como el de threads, salvo que las operaciones que bloquean, se manejan diferente.
No son administrados por el scheduler, sino por un executor.
Cuando NO usar async
- Tareas que tengan un trabajo intensivo del CPU
- Calcular un factorial
- Calcular un producto de matrices
- Tareas que requieren sincronización:
- Implementar el problema de los filósofos
- Estado interno Compartido
Cuando SI usar async
- Tareas con poco tiempo de procesamiento y grandes tiempos de espera:
- Consultar servicios externos
- Leer de un archivo
- Servir requests HTTP
Implementación
- Cuando llamo a una función async me devuelve el future automáticamente.
- No se corre ninguna línea de ese código hasta que le haga poll
- Cuando se corre poll avanza hasta su primer paso de ejecución
- No se ejecuta poll hasta que no le haga await al future.
Hello World Async
Implementación Poll y Future
Functional Style
Encadenar Futures
MicroServicios