根据我的经验,文件:如果使用少量数据频繁调用文件:read/2将非常慢,尽管read_ahead和raw.您必须在其上实现二进制缓冲区.如果这是面向块处理的意思,那么我同意.
我说的是几个小时的运行时间(文件:只读/ 2)与2分钟(在纯Erlang中实现缓冲).
以下是我一次读取10个字节的测量结果:
%% Bufsize vs. runtime [ns]
%% 50 169369703
%% 100 118288832
%% 1000 70187233
%% 10000 64615506
%% 100000 65087411
%% 1000000 64747497
Run Code Online (Sandbox Code Playgroud)
在此示例中,性能并未真正增加超过10 KB的缓冲区大小,因为file:read的相对开销变得足够小.