De acuerdo con mi experiencia, archivo: Lectura/2 solo habrá muy lenta si se llama a menudo con pequeñas cantidades de datos, a pesar de read_ahead
y raw
. Debe implementar un búfer binario además de eso. Si eso se entiende por procesamiento orientado a bloques, entonces estoy de acuerdo.
Estoy hablando de tiempos de ejecución de pocas horas (con archivo: lectura/2 solamente) frente a 2 minutos (con almacenamiento en búfer implementado en Erlang puro).
Éstos son mis medidas para la lectura de unos 10 bytes a la vez:
%% Bufsize vs. runtime [ns]
%% 50 169369703
%% 100 118288832
%% 1000 70187233
%% 10000 64615506
%% 100000 65087411
%% 1000000 64747497
En este ejemplo, el rendimiento en realidad no aumenta con el tamaño del búfer de 10 KB, debido a la sobrecarga relativa para archivo: leer se vuelve lo suficientemente pequeño.
Podría tener que descubrir algo que sea de mayor rendimiento para la producción, pero esto funciona muy bien para la creación de prototipos. – Erlang
¿Has medido o simplemente has adivinado? Estoy bastante satisfecho con 'file: read/2' cuando se abre el archivo usando' [raw, binary, read_ahead] 'y usando el procesamiento orientado al bloque. ¿Qué rendimiento esperas? –