C++ 无拥塞的高速以太网消息

C++ 无拥塞的高速以太网消息,c++,networking,tcp,udp,C++,Networking,Tcp,Udp,我有两个程序在它们之间传输UDP消息。第一个程序是模拟器,另一个程序是控制器 模拟器和控制器都是用C++编写的。我希望模拟器将模拟状态传输给控制器,控制器再向模拟器发送控制信号。所有消息的大小将低于1kb 我现在使用UDP进行以太网连接。前2-3秒的速度良好,然后明显下降到原来速度的十分之一。我怀疑这是由于网络拥塞造成的 问题是: 我认为UDP比TCP快,但是你认为TCP会因为拥塞而更快吗?我能做些什么来提高速度吗 编辑:我如何测量速度 我刚刚做了一些不同长度的模拟 模拟5秒:1.10秒 模拟

我有两个程序在它们之间传输UDP消息。第一个程序是模拟器,另一个程序是控制器

模拟器和控制器都是用C++编写的。我希望模拟器将模拟状态传输给控制器,控制器再向模拟器发送控制信号。所有消息的大小将低于1kb

我现在使用UDP进行以太网连接。前2-3秒的速度良好,然后明显下降到原来速度的十分之一。我怀疑这是由于网络拥塞造成的

问题是: 我认为UDP比TCP快,但是你认为TCP会因为拥塞而更快吗?我能做些什么来提高速度吗

编辑:我如何测量速度

我刚刚做了一些不同长度的模拟

  • 模拟5秒:1.10秒
  • 模拟50秒:26秒
  • 模拟100秒:61秒
您可以看到,当模拟运行较长时间时,速度会下降

EDIT2:阻塞/非阻塞

我使用非阻塞发送和阻塞接收。仿真使用Simulink编写,接收和发送用两个C++模块实现。 我的猜测是先发送,然后运行接收块。
没有固定的间隔。当计算完成时发送。这一切都在一个线程中。

请定义如何测量速度。UDP除了丢弃的数据包之外没有自然的速率限制。可能最初您正在填充中间缓冲区,然后丢弃数据包,因为缓冲区已饱和。一些问题:您使用的是阻塞I/O还是非阻塞I/O?您是以固定的时间间隔调用send(),还是仅当套接字选择/轮询为准备写入时才调用send()?您是在专用线程中执行网络I/O,还是同一线程还执行其他非平凡任务,这些任务有时可能会阻止它及时调用send()(或recv())?