提供了同一个程序,它会读取一个随机生成的输入文件,将读取到的字符串回显到输出中。唯一的区别在于,在一侧提供了来自Linux系统调用的读写方法,而在另一侧则使用fread/fwrite。
对于大小为10Mb并将其回显到/dev/null,并确保文件不被缓存的输入进行应用程序定时,我发现当使用非常小的缓冲区(例如1字节)时,libc的fwrite速度比较快。
这里是使用fwrite的时间输出:
real 0m0.948s
user 0m0.780s
sys 0m0.012s
使用系统调用write:
real 0m8.607s
user 0m0.972s
sys 0m7.624s
我能想到的唯一可能性是,内部的libc已经缓存了我的输入...不幸的是,我在网上找不到太多有关此事的信息,所以也许这里的大师们可以帮助我解决问题。