在C / C ++中有效使用文件描述符

时间:2012-10-16 13:49:18

标签: c++ file-descriptor

我正在使用C ++从我的客户端系统备份文件。每一秒,文件都从我的客户机器中泛滥,我必须为每个要在服务器中写入的文件获取文件描述符。有时我会在一分钟内得到10K文件,所以我怎样才能真正利用文件描述符有效地编写多个文件。

我有一个C ++ Socket Listener,每个Client机器连接到Server并开始上传文件。是否可以使用有限的文件描述符编写多个文件。我已经尝试将所有文​​件写入一个大的文件,但是我已经跟踪文件的结束并在大文件中为我写入的每个文件中的起始字节开始。这将是一些工作

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

1 个答案:

答案 0 :(得分:1)

看起来您应该对请求进行排队。

通过这种方式,您可以拥有数量有限的工作人员(例如,16,具体取决于您系统上的硬件)来实际传输文件,并保持其余工作等待。

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

  • 它删除了线程调度开销
  • 它消除了资源瓶颈(fd +缓冲区分配)
  • 它不会同时打击磁盘(在旧式硬件上(即最常使用的磁盘),如果导致重复的磁盘搜索,这会导致性能大幅下降。

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

      时带宽使用率是最佳的
      sum(upload rates) ~= effective disk write bandwitdh
      

排队: