采取以下代码片段:
f = open("/mnt/remoteserver/bar/foo.bin", O_RDONNLY);
while (true)
{
byteseread = read(f, buffer, 1000);
if (bytesread > 0)
ProcessBytes(buffer, bytesread);
else
break;
}
如果上面的例子,假设远程文件 foo.bin 是 1MB 并且之前从未被客户端访问过。因此,大约需要 1000 次“读取”来获取整个文件。
此外,假设安装在客户端上的目录的服务器是通过互联网而不是本地的。到客户端的快速带宽,但延迟很长。
是否每个“读取”调用都会调用往返服务器以请求更多数据?或者客户端/服务器协议是否认识到对远程文件的后续读取通常是连续的,因此,在应用程序实际对其进行 read() 调用之前,后续块被下推。因此,后续的读取调用返回更快,因为数据是预取和缓存的。
现代网络文件系统协议(NFS、SMB/Samba 等等?)是否会进行类似的优化。是否有针对互联网进行了优化的网络文件系统协议?
我正在调查一个可能涉及通过 Internet 实施网络文件系统的个人项目。如果可以减少文件 i/o 的往返次数,我感到性能可能会更快。