Este artículo técnico detalla las mejores prácticas para desarrollar aplicaciones asíncronas en Rust que utilicen el runtime Tokio, enfocándose en el equilibrio entre la equidad de ejecución y el procesamiento por lotes. El autor, Russell, argumenta que el rendimiento no depende únicamente de la configuración del runtime, sino de la interacción entre Tokio y el código de la aplicación, lo que explica por qué muchos problemas solo aparecen en producción.
El texto establece que la latencia de programación es la métrica más útil para diagnosticar problemas de rendimiento, ya que mide el tiempo entre que una tarea está lista para ejecutarse y que Tokio la procesa. Para minimizar la latencia, se recomienda abandonar el procesamiento continuo de datos en bucles infinitos, ya que esto genera 'polls' largos y desequilibrio entre conexiones. En su lugar, se sugiere rendición explícita tras cada solicitud, lo que puede reducir la latencia hasta 10 veces en sistemas como Redis, aunque con un coste en el throughput.
Por otro lado, para maximizar el throughput, se aconseja agrupar el trabajo pesado, como operaciones de sistema de archivos, en lotes más grandes o en hilos dedicados, evitando el uso excesivo de spawn_blocking, que puede convertirse en un cuello de botella global. El artículo también advierte sobre los recursos globales de Tokio, como la cola de tareas y la cola de bloqueo, que pueden saturarse a altas cargas de trabajo. Finalmente, se destaca la importancia de usar herramientas de trazado como dial9 o tokio-metrics para identificar estos patrones de rendimiento y tomar decisiones informadas sobre la arquitectura del software.
