2011-03-30 23 views
5

He leído que mmap es una ventaja que la entrada de archivos, porque leerá una página en el pagecache del kernel y compartirá la página en el espacio de direcciones del usuario. Mientras que, la entrada de archivo realmente trae una página al kernel y copia una línea al espacio de direcciones del usuario. Por lo tanto, existe esta sobrecarga de espacio adicional con la entrada de archivos.Ventajas de mmap vs fileinput

Por lo tanto, estoy planeando pasar a mmap, pero quiero saber si los hackers avanzados de python mejoran el rendimiento.

Si es así, ¿hay una implementación similar de la entrada de archivos que utiliza mmap?

Indíqueme cualquier código de código abierto, si conoce.

gracias

Respuesta

1

mmap toma un archivo y lo pega en la memoria RAM, para que pueda índice como si fuera una matriz de bytes o como una estructura de datos grande.

Es mucho más rápido si está accediendo a su archivo de manera "aleatoria", es decir, haciendo muchas combinaciones de fseek(), fread(), fwrite().

Pero si solo está leyendo el archivo y procesando cada línea una vez (por ejemplo), entonces es poco probable que sea significativamente más rápido. De hecho, para cualquier tamaño de archivo razonable (recuerde que con mmap todo debe encajar en la RAM, o se produce una búsqueda que comience a reducir la eficacia de mmap), probablemente no se pueda distinguir.

+9

Esto es incorrecto. mmap: los archivos ed no tienen que caber en la RAM; deben caber en el espacio de direcciones del proceso. El espacio de direcciones disponible es de 2-3 GB para un proceso de 32 bits y muy grande para un proceso de 64 bits, independientemente de la cantidad real de RAM en la máquina. En Python de 64 bits, ¡es perfectamente razonable mapear un archivo de 100 GB! –

+1

Baffe, vale, tienes razón, lo que quise decir es que "todo debe encajar en la RAM para evitar las ineficiencias que estás utilizando mmap para evitar en primer lugar". Lo cual, por supuesto, es una simplificación, pero sean razonables. Aquí estoy dando una regla general, no un tratado completo sobre el análisis de la localización en los algoritmos – AndrewStone

+3

. No estoy seguro de a qué ineficiencias se refiere. mmap: si un archivo no lee todo el archivo del disco. Solo se leen las partes del archivo que realmente accede con el objeto devuelto desde mmap. –