我创建了一个模块,使用TCP客户端服务器通信使用多个套接字传输数据。这将在10秒内传输20MB的文件。
多个套接字在每个单独的线程中发送/接收数据。
当我从另一个工作线程启动模块时,发送同一文件所需的时间增加到40秒。
请让我知道任何解决方案,以避免时间滞后。
答案 0 :(得分:0)
您是在同步线程以从客户端的文件中读取内容并在服务器端写回文件吗?这增加了时间。
除此之外,默认情况下,您将在客户端和服务器上的多个线程之间切换上下文。
答案 1 :(得分:0)
一个问题可能是磁盘缓存和搜索。如果您还没有这样做,请尝试更精细地交错由不同线程传输的块(例如,4KB,因此第一个线程传输的字节0 ... 4095,第二个线程传输的是4096 ... 8191等)。 / p>
还要避免使用互斥锁,例如让每个线程知道线程启动时应该读取和发送的内容,或者写入和接收,因此不需要进行线程间通信。中止整个传输可以通过 atomic 标志变量(在传输块后由每个线程检查)而不是互斥锁来完成。
同样在接收端,确保在内存中进行缓冲,以便顺序写入目标文件。也就是说,如果一个线程比其他线程更快地传输块,那么这些“早期”块只会保留在内存中,直到所有前面的块都被接收和写入为止。
如果缓冲区大小在这里成为一个问题,你可能需要在一端实现一些线程间同步(无关紧要,慢慢接收或发送),以防止最快的线程超前最慢的线程,但对于数十兆字节的文件大小,在PC上,这应该不会成为一个问题。