Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C/C+中文件描述符的有效使用+; 我使用C++从我的客户端系统备份文件。每一秒,文件都会从我的客户机中溢出,我必须为每个要写入服务器的文件获取文件描述符。有时我在一分钟内甚至可以得到10K个文件,那么我如何真正利用文件描述符高效地编写多个文件呢 我有一个C++套接字侦听器,每个客户端机器连接到服务器并开始上传文件。是否可以使用有限的文件描述符写入多个文件。我已经试着将所有文件写入一个大文件,但对于我写入的每个文件,我都会在大文件中记录文件的结束字节和开始字节。这将是一项非常艰巨的工作_C++_File Descriptor - Fatal编程技术网

C/C+中文件描述符的有效使用+; 我使用C++从我的客户端系统备份文件。每一秒,文件都会从我的客户机中溢出,我必须为每个要写入服务器的文件获取文件描述符。有时我在一分钟内甚至可以得到10K个文件,那么我如何真正利用文件描述符高效地编写多个文件呢 我有一个C++套接字侦听器,每个客户端机器连接到服务器并开始上传文件。是否可以使用有限的文件描述符写入多个文件。我已经试着将所有文件写入一个大文件,但对于我写入的每个文件,我都会在大文件中记录文件的结束字节和开始字节。这将是一项非常艰巨的工作

C/C+中文件描述符的有效使用+; 我使用C++从我的客户端系统备份文件。每一秒,文件都会从我的客户机中溢出,我必须为每个要写入服务器的文件获取文件描述符。有时我在一分钟内甚至可以得到10K个文件,那么我如何真正利用文件描述符高效地编写多个文件呢 我有一个C++套接字侦听器,每个客户端机器连接到服务器并开始上传文件。是否可以使用有限的文件描述符写入多个文件。我已经试着将所有文件写入一个大文件,但对于我写入的每个文件,我都会在大文件中记录文件的结束字节和开始字节。这将是一项非常艰巨的工作,c++,file-descriptor,C++,File Descriptor,我希望能够以高性能写入文件,同时确保磁盘安全。有什么想法可以分享吗?看来你应该把请求排成队列 这样,您就可以有有限数量的工作人员(例如,16名,具体取决于系统上的硬件)来实际传输文件,并让其余的工作人员等待 这可能会提高吞吐量和性能,因为 它消除了线程调度开销 它消除了资源瓶颈(fd+缓冲区分配) 它不会同时命中磁盘(在旧式硬件上(即最常旋转磁盘),如果导致重复磁盘搜索,则会导致性能严重下降 免责声明:您的文件系统/操作系统可能通过重新安排磁盘写入(电梯/完全公平队列和其他算法)来共同限制/

我希望能够以高性能写入文件,同时确保磁盘安全。有什么想法可以分享吗?

看来你应该把请求排成队列

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

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

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

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

      sum(upload rates) ~= effective disk write bandwitdh
      
在排队过程中:

  • 查看操作系统的
    backlog
    参数,以执行
    listen
    功能
  • 看看实现

    另请参见或其他搜索引擎


看来您可能应该对请求进行排队

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

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

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

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

      sum(upload rates) ~= effective disk write bandwitdh
      
在排队过程中:

  • 查看操作系统的
    backlog
    参数,以执行
    listen
    功能
  • 看看实现

    另请参见或其他搜索引擎


如果瓶颈是每个进程有多个文件描述符,您可以尝试增加打开文件描述符的限制-同时打开10K个文件描述符并不太多。您是否同时有10K个客户端?每个客户端一次只能发送一个文件。似乎您要关闭第一个文件在打开第二个之前,您只能为每个客户端使用一个额外的文件描述符。@VaughnCato是的,有时我们会达到那个数量的客户端。平均约有2K个客户端同时连接sehe所描述的内容。请尝试将每个文件保存在内存中,直到完成为止,然后作为si打开/写入/关闭单个操作。如果瓶颈是每个进程有多个文件描述符,您可以尝试增加打开文件描述符的限制-同时打开10K个文件描述符并不太多。您是否同时有10K个客户端?每个客户端一次只能发送一个文件。您似乎要关闭在打开第二个文件之前先打开第一个文件,这样每个客户机只能使用一个额外的文件描述符。@VaughnCato是的,有时我们会碰到那个数量的客户机。平均约有2K个客户机在sehe描述的行上同时连接。试着将每个文件保存在内存中,直到它完成,然后打开/写入/克隆se作为一个单一的操作。