1

我正在使用 C++ 从我的客户端系统备份文件。每一秒,文件都从我的客户端机器中涌入,我必须为每个文件获取文件描述符以写入服务器。有时我在一分钟内甚至可以得到 10K 个文件,那么我如何才能真正利用文件描述符来有效地写入多个文件。

我有一个 C++ 套接字侦听器,每台客户端机器都连接到服务器并开始上传文件。是否可以使用有限的文件描述符编写多个文件。我已经尝试将所有文​​件写入一个大文件,但我已经跟踪了文件的结尾和我写入的每个文件的大文件中的开始字节。那将是一项工作.

我希望能够编写高性能的文件并保持磁盘安全。有什么想法可以分享..?

4

1 回答 1

1

看来您应该将请求排队。

这样,您可以让有限数量的工作人员(例如 16 个,具体取决于系统上的硬件)来实际传输文件,并让其余工作人员等待。

这可能会提高吞吐量和性能,因为

  • 它消除了线程调度开销
  • 它消除了资源瓶颈(fd + 缓冲区分配)
  • 它不会同时命中磁盘(在老式硬件上(即最常旋转磁盘),如果您导致重复磁盘寻道,这可能会导致性能严重下降。

    • 免责声明:您的文件系统/操作系统可以通过重新安排磁盘写入(电梯/完全公平排队和其他算法)来共同限制/减少这种影响。
    • 无论如何,在将顺序上传写入共享卷时,通常带宽使用将是最佳的

      sum(upload rates) ~= effective disk write bandwitdh
      

关于排队:

于 2012-10-16T13:54:33.020 回答