通过套接字传输大型数组的最快方法

时间:2015-07-22 07:14:46

标签: c++ c arrays sockets

我试图将大量数据(长整数数组)从多个(8)远程计算机传输到单个计算机(主进程)。所有这些都通过100 MBps LAN连接,并且是相同的机器(所以不用担心endianess)。

每台远程计算机都有一个8GB长的int数组,我必须将它传输到单台计算机进行处理。我的问题是将这些数组快速传输到主进程的最佳方法是什么。我尝试使用传统的TCP来完成这项工作,并且需要花费大量时间来传输数据(大约28分钟)。有没有办法提高这个速度? 。切换到UDP会帮助我吗?使用多个端口/套接字会帮我缓冲吗?什么是解决此类问题的最佳方法?

我可能无法压缩数据(因为大多数都是唯一的),我需要发送所有内容(因为我在主流程中执行重要操作)

2 个答案:

答案 0 :(得分:3)

您可以尝试压缩阵列。你可以找到几种算法,post可以帮助你。它为三种最着名的无损算法提供了解释:
 霍夫曼一种基于树的算法,它有很多应用和专业化  2.运行长度编码的RLE非常适合图标压缩
 3. LZ77使用字典并且是许多不同算法的基础

您需要无损算法,因为您不希望丢失数组中的数据。这就是为什么我不推荐UDP,因为它不检查数据是否已被接收。

答案 1 :(得分:3)

首先,升级您的硬件。使用1GB网卡(如果你有预算,则为10GB)和一个不错的开关,你可以在没有编码的情况下获得10倍的提升,传输8GB数据需要只需一分钟。通过NIC绑定进一步推动它再次将它加倍到 30秒(或比你快60倍)。

接下来,调整算法,是否需要经常发送整个8GB数据?你可以管道它,以流方式进行,或只发送差异(副本),以便获得良好的数据处理吞吐量吗?

你可以做的最后一件事是压缩,最好是一块块,这样你就不会一次压缩整个8GB。