multithreading - 本地写入文件与远程文件系统?

标签 multithreading file-io filesystems nfs distributed-filesystem

我的问题是关于 Windows 上的远程文件系统。

假设您的工作站 X 可以访问网络上的文件系统 - 例如 - \\ServerY\MYDir\

想象一个场景,X 上有两个并发线程。

  1. 线程 1 正在将文件写入 X 中的本地硬盘驱动器目录 - C:\MYDir\
  2. 线程 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/

相关文章:

java - 来自不同 Java 线程的 JNI native 调用是否按顺序进行?

php - 非阻塞命名管道

c++ - 使用boost库c++在目录和子目录中搜索文件

javascript - HTML5 文件系统 API - 让用户将文件保存到他们的实际文件系统

linux - 如何在功能测试中模拟 INotify 失败?

java - 套接字流无法刷新

C++ 类 : Object that creates Thread + pointer to the function = Access violation

java - 文件池(如连接池)

java - 文件写入 - PrintStream 追加

java - 用于车辆位置的实时网站和Java中的数据库R/W