发现有时事情无法按照预测的进行。
我们从各种书上看到,fread()系列的C语言标准库函数是有缓存的I/O,这是否意味着我们可以随便的用呢?
我做了个小实验,文件拷贝,使用fread和fwrite,每次1字节,100M左右的文件用时100秒左右,每次1024字节,用时8秒。在前一种情况下,外存操作已经不是主要矛盾,内存操作则成为主要矛盾。1秒的时间完成大约100万个COPY操作,问题出在对内存的操作上。
所以我们一定要牢记各种操作的时间量级,在规模大了以后,什么都有可能成为瓶颈。
DRAM访问时间:100ns量级
磁盘访问时间:10ms量级
CPU时钟周期:1ns量级
---来自《深入理解计算机系统》