La mayoría de las aplicaciones de terminal utilizan el almacenamiento en búfer por línea para garantizar que los usuarios vean la salida de inmediato. En este modo, el sistema vacía el búfer de salida cada vez que encuentra un carácter de salto de línea. Si bien esto proporciona una experiencia de respuesta rápida, crea un cuello de botella en el rendimiento cuando un programa genera un gran volumen de salida en un período corto. Por ejemplo, al extraer un archivo con una herramienta como `unzip`, el proceso de imprimir cada nombre de archivo individual puede dominar el tiempo de ejecución porque cada nombre requiere una llamada de escritura del sistema independiente. Esto a menudo obliga a los usuarios a utilizar modos 'quietos' para mantener la velocidad, sacrificando la visibilidad del progreso.
Para resolver esto, el autor propone un mecanismo de vaciado 'basado en plazos'. En lugar de activar una escritura en cada salto de línea, el sistema mantiene un búfer y solo lo vacía cuando ha pasado un plazo de tiempo específico, por ejemplo, cada 100 milisegundos. Este enfoque está inspirado en el algoritmo de Nagle, que maneja el tiempo de inactividad en las comunicaciones de red. Al utilizar un plazo, el sistema puede agrupar múltiples líneas de texto en una sola escritura del sistema si se producen con la suficiente rapidez. Debido a que 100ms es generalmente más rápido que la percepción humana, el usuario ve la salida casi instantáneamente, pero la sobrecarga de múltiples llamadas al sistema se reduce significativamente.
Este método proporciona un punto intermedio entre el almacenamiento en búfer por línea y el almacenamiento completo. En un escenario de alto rendimiento, como un programa que procesa miles de archivos, el enfoque basado en plazos permite que el programa 'tenga lo mejor de ambos mundos': entrega las líneas a la terminal con la rapidez suficiente para que se sienta en tiempo real, mientras opera a velocidades más cercanas al almacenamiento completo. La implementación puede integrarse en el bucle principal de un programa comprobando el plazo entre unidades de trabajo. Si bien esto evita la necesidad de hilos adicionales, requiere que la aplicación sea consciente del estado del búfer, permitiéndole equilibrar la compensación entre la latencia de salida y el rendimiento del procesamiento. Sin embargo, la fuente no proporciona datos de referencia específicos para cuantificar el aumento exacto de velocidad sobre el almacenamiento en búfer por línea estándar en estos escenarios.
