我正在使用C ++从我的客户端系统备份文件。每一秒,文件都从我的客户机器中泛滥,我必须为每个要在服务器中写入的文件获取文件描述符。有时我会在一分钟内得到10K文件,所以我怎样才能真正利用文件描述符有效地编写多个文件。
我有一个C ++ Socket Listener,每个Client机器连接到Server并开始上传文件。是否可以使用有限的文件描述符编写多个文件。我已经尝试将所有文件写入一个大的文件,但是我已经跟踪文件的结束并在大文件中为我写入的每个文件中的起始字节开始。这将是一些工作
我希望能够编写具有高性能的文件并保持磁盘安全。有什么想法分享..?
答案 0 :(得分:1)
看起来您应该对请求进行排队。
通过这种方式,您可以拥有数量有限的工作人员(例如,16,具体取决于您系统上的硬件)来实际传输文件,并保持其余工作等待。
这可能会提高吞吐量和性能,因为
它不会同时打击磁盘(在旧式硬件上(即最常使用的磁盘),如果导致重复的磁盘搜索,这会导致性能大幅下降。
无论如何,在将顺序上传写入共享卷时,通常在
时带宽使用率是最佳的sum(upload rates) ~= effective disk write bandwitdh
排队:
backlog
函数的listen
参数另请参阅consumer/producer in c++或其他搜索引擎