带插座的转移时间



实际上,我正在开发一个嵌入式系统,我通过套接字发送图像。我在两端(客户端和服务器(都使用 linux。

以太网的吞吐量为 1000Mbit/s。我试图计算发送一张图像的时间。它是 32 位图像(浮点型(,尺寸为 :6004*7920. 我希望转移时间:

(6004*7920*4*8(/(1000000000( = 1.52 秒

从我的代码来看,这次是2.1 秒。我不明白这种区别。协议的时间..?

请注意,我已经将巨型帧增加到 9000。 感谢您的帮助!

关于1000Mb/sec的传输速率数字,要记住的是,它是理论最大值,而不是您在实践中经常实际获得的速度。 测得的比率可能略低。

测量速率可能低于理论速率的一些原因是(排名不分先后(:

  1. TCP 数据包标头和以太网帧标头导致的开销
  2. 丢弃的数据包(导致 TCP 流短暂停止,以便可以重新发送丢弃的数据包(
  3. 发送或接收硬件上的 CPU 或内存带宽限制
  4. TCP 的慢启动功能,可在会话开始时降低传输速率
  5. 其他网络流量争用相同的带宽
  6. 发送或接收代码的次优实现(例如,接收程序可能花时间将接收到的数据写入磁盘,延迟下一次调用recv(),允许其TCP接收缓冲区溢出(
  7. 由于以太网电缆质量不高或电缆长度过长而导致传输速度降低

作为旁注,如果您想减少传输图像所需的时间,您可以考虑在发送数据之前压缩数据(例如,通过在发送端转换为.jpg(。 如果可以显着减少要发送的数据量,则可以相应地减少传输时间。 (您可以通过在服务器端的单独线程中进行压缩来进一步加快速度,以便图像 #(N+1( 的压缩可以与图像 #N 的传输并行进行(

最新更新