我的问题是关于 Windows 上的远程文件系统。
假设您的工作站 X 可以访问网络上的文件系统 - 例如 - \\ServerY\MYDir\
。
想象一个场景,X 上有两个并发线程。
- 线程 1 正在将文件写入 X 中的本地硬盘驱动器目录 -
C:\MYDir\
。 - 线程 2 正在写入
\\ServerY\MYDir\
中的远程文件。
我想知道这两个IO操作实际上是独立的,即线程1是否仅使用X的硬盘 Controller ,线程2是否仅使用网络并将所有数据通过线路传递到服务器,其中实际上写入到serverY 上的硬盘。
或者
线程 2 是否也在 X 中生成一些本地缓存数据(因此使用 X 上的硬盘 Controller )。在这种情况下,线程2的IO操作可能会干扰线程1的操作,从而可能导致性能损失。
基本上 - 并行写入本地文件和远程文件会有什么好处吗?
我的问题特定于 Windows 支持的远程文件系统,例如 Microsoft Networks 或 NFS
最佳答案
通常,线程 2 不会在本地缓存写入,并且两个线程是独立的。 所以一般来说,是的,您会看到同时访问两个文件的性能优势。
您通常还会看到访问不同磁盘上的两个本地文件所带来的性能优势 - 即使它们位于同一 Controller 上。
即使文件位于同一磁盘上,您也经常可以看到性能优势,因为这可以让磁盘保持繁忙状态 - 但为了避免磁头晃动,您需要在大块中执行 IO。 如果本地驱动器是闪存,则没有寻道时间,因此使用多个线程读取/写入它不会像在硬盘驱动器上那样降低性能。
有几件事可能会影响这一点: 1:Windows 支持“脱机文件”,允许客户端缓存远程文件系统的文件,在本地驱动器上读取和写入。过去,客户端仅在离线时使用本地缓存。不知道Win8会不会改变这个。
2:“\ServerY”实际上可能指的是本地计算机。
关于multithreading - 本地写入文件与远程文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16382705/