0

我创建了一个模块来使用 TCP 客户端服务器通信使用多个套接字传输数据。这将在 10 秒内传输 20MB 的文件。

多个套接字在每个单独的线程中发送/接收数据。

当我从另一个工作线程启动模块时,发送相同文件所需的时间增加到 40 秒。

请让我知道任何解决方案以避免时间滞后。

4

2 回答 2

0

您是否正在同步线程以从客户端的文件中读取内容并在服务器端写回文件?这增加了时间。

除此之外,默认情况下,您将在客户端和服务器的多个线程之间进行上下文切换时间。

于 2013-01-02T11:06:23.160 回答
0

一个问题可能是磁盘缓存和查找。如果您还没有这样做,请尝试更精细地交错由不同线程传输的块(例如,到 4KB,因此字节 0...4095 由第一个线程传输,4096...8191 由第二个线程传输等)。

还要避免互斥体,例如让每个线程知道它应该在线程启动时读取和发送什么,或写入和接收什么,因此不需要线程间通信。可以通过原子标志变量(在传输块后由每个线程检查)而不是互斥锁来中止整个传输。

同样在接收端,请确保在内存中进行缓冲,以便按顺序写入目标文件。也就是说,如果一个线程传输块的速度比其他线程快,那么那些“早期”块只会保留在内存中,直到所有前面的块都被接收和写入。

如果缓冲区大小在这里成为问题,您可能需要在一端实现一些线程间同步(无关紧要,您是否减慢接收或发送速度),以防止最快的线程领先最慢的线程太远,但是对于数十兆字节的文件大小,在 PC 上,这不应该成为问题。

于 2013-01-02T11:56:27.460 回答