Согласно моему опыту, файл : read / 2 сам по себе будет очень медленным при частом вызове с небольшими объемами данных, несмотря на read_ahead
и raw
. Вы должны реализовать двоичный буфер поверх этого. Если это подразумевается под блочно-ориентированной обработкой, то я согласен.
Я говорю о времени выполнения нескольких часов (с файлом : только чтение / 2 ) против 2 минут (с буферизацией, реализованной в чистом Эрланге).
Вот мои измерения для считывания нескольких 10 байтов одновременно:
%% Bufsize vs. runtime [ns]
%% 50 169369703
%% 100 118288832
%% 1000 70187233
%% 10000 64615506
%% 100000 65087411
%% 1000000 64747497
В этом примере производительность на самом деле не увеличивается при размере буфера 10 КБ, поскольку относительные издержки для файла: чтение становится достаточно маленьким.