Para la transmisión del sistema de archivos, ¿hay alguna manera de ‘mantener una conexión abierta’, como con TCP, o la transferencia de datos relativamente sin estado es lo suficientemente rápida?

Tomó algo de Google-fu avanzado, pero finalmente encontré el enlace … Hmm, una respuesta que solicité, a una pregunta que hice … escrita por nada menos que J. Barton …

Bueno, podría haber olvidado preguntar esto, pero al menos no olvidé la conclusión:

Esta fue una gran lección para mí. Ya no intento adivinar el sistema operativo, el compilador o su optimizador, ni ninguna llamada a la biblioteca. Ahora escribo un código para evaluar mis opciones. También me frotó la nariz en la optimización prematura, una lección que nunca olvidaré.

La respuesta de J. Barton a ¿Cuáles son algunos trucos de rendimiento de los que estás particularmente orgulloso por la magnitud de los resultados, o porque es una optimización elegante, o por cualquier otra razón?

Entonces, sí, como dijo Toby Thain, es casi seguro que su sistema operativo sea lo suficientemente inteligente como para hacer lo correcto (readahead).

En general, abre el archivo y lee todo en la memoria que administra explícitamente. De esta manera, está seguro de que está en la memoria.

Simplemente abrir un archivo y mantener un descriptor de archivo no garantiza que todo el archivo esté en la memoria.

PD. También asegúrese de cargar el archivo en una estructura de datos apropiada en la memoria para procesarlo de manera más efectiva.

Si realmente sabe exactamente cómo se comportará su programa, y ​​no tiene miedo de un poco de C, puede usar mmap y madvise para describir las características de lectura. Puede decirle al sistema operativo cuánto va a leer y en qué patrón para que pueda buscar previamente en el momento adecuado. Mejor aún, puede asignar sus datos directamente a la memoria para poder iterarlos con un puntero sin tener que leerlos en variables y hacer el procesamiento de línea.

Esto es muy poderoso.

Simplemente lea el archivo en fragmentos de tamaño razonable en el nivel de aplicación. El sistema operativo ya hace un buen trabajo al almacenar en caché el disco y el archivo IO y prácticamente todo lo que intente hacer para mejorarlo será inútil.

Sí, esta es una técnica bien establecida, a menudo llamada “readahead”.

Los sistemas operativos modernos ya hacen esto.