File io Erlang io:格式缓冲和效率

File io Erlang io:格式缓冲和效率,file-io,erlang,performance,File Io,Erlang,Performance,这个问题特定于Erlang,但可能会对其他IO库产生普遍影响。在Erlang中,我可以编写io:format(IOF,“data:~p”,[data]),它将变量data的内容打印到IOF指向的文件中。我的问题是:在效率方面,喜欢许多小的io:format()调用还是一个大的调用更好?例如,什么会更快?出于演示目的,假设my数据变量的大小分别为1KB和N>100000 情景A: io:format(IOF, "data1: ~p", [Data1]) io:format(IOF, "data2:

这个问题特定于Erlang,但可能会对其他IO库产生普遍影响。在Erlang中,我可以编写
io:format(IOF,“data:~p”,[data])
,它将变量
data
的内容打印到
IOF
指向的文件中。我的问题是:在效率方面,喜欢许多小的io:format()调用还是一个大的调用更好?例如,什么会更快?出于演示目的,假设my
数据
变量的大小分别为
1KB
N>100000

情景A:

io:format(IOF, "data1: ~p", [Data1])
io:format(IOF, "data2: ~p", [Data2])
...
io:format(IOF, "dataN: ~p", [DataN])
情景B:

io:format(IOF, "data1: ~p data2: ~p ... dataN: ~p", [Data1, Data2, ..., DataN])

如果这种差异可以忽略不计,我并不感兴趣,但如果可能存在很大的差异,我想知道原因。

我建议您研究模式,其中之一是
{delayed\u write,Size,Delay}
。它允许您缓冲数据并有效地将其写入设备


这样一来,两个调用都不会有太大的区别。

因此,延迟写入可以让我指定在转储缓冲区之前加载多少字节,而不管进行了多少io:format调用?io&io\u lib是有史以来最慢的。考虑使用日志库或RAW文件的快速操作。为什么它慢,为什么使用第三部分日志库更快?我不熟悉内部实现。IO在Erlang中一直是一个性能问题,相信我IO和IO_lib会影响您的系统。使用fprof(探查器)查看这些功能的高度。使用
timer:tc/1
timer:tc/3
在有疑问时进行测量。直接检查比猜测最快的要容易得多。至于实际调用,调用
io:format(…,[D1,D2,D3])
会更快,因为新函数调用更少。如果它真的起作用,这取决于你调用函数的频率。再一次,测量以确定。