我有两个关于 Erlang 文件 i/o 的问题;在 Erlang 中实现的最佳方法是什么:
谢谢!
最佳答案
根据我的经验, file:read/2 单独将是 非常尽管 read_ahead
,但如果频繁调用少量数据,速度会很慢和 raw
.您必须在此基础上实现一个二进制缓冲区。如果这是面向块的处理,那么我同意。
我说的是几个小时的运行时间(仅使用 file:read/2)与 2 分钟(在纯 Erlang 中实现缓冲)。
这是我一次读取几个 10 个字节的测量结果:
%% Bufsize vs. runtime [ns]
%% 50 169369703
%% 100 118288832
%% 1000 70187233
%% 10000 64615506
%% 100000 65087411
%% 1000000 64747497
在这个例子中,性能并没有真正增加超过 10 KB 的缓冲区大小,因为 file:read 的相对开销变得足够小。
关于file - Erlang 文件 I/O : Large binary files and gzip streaming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807803/