我正在开发一个应用程序,它将渲染分布在多个设备(大学项目)中。
每个帧由几个块(16x16像素)组成,每个设备被“分配”多个要渲染的块。这些块在渲染时会被压缩并序列化为缓冲区,直到达到最大值,此时它将被发送。
我的问题出在接收端,需要从多个设备接收每帧的几个数据报。目前我为每个数据包调用recv,但这需要为每个数据包进行上下文切换。通过一次呼叫接收许多数据包会更好。数据包标识它来自哪个客户端,因此这些地址无关紧要。
我查看了WSARecv和WSARecvFrom,但似乎都没有能够从多个主机接收多个数据包。
提前致谢:)
获取几个数据包也很不错,有人知道怎么做吗?
答案 0 :(得分:2)
这可能不是您试图解决的任何感知性能问题的原因。如果没有看到您的代码,我会猜测您正在做的是:
1. recv a packet
2. Process a packet
3. repeat
你应该做的是:
1. use one thread to recv packets with a pool of buffers and shove the received buffer pointers into a queue.
2. use another slightly lower priority thread to pull items from the queue and process them.
这将极大地提高您的系统消化数据的能力,并错过更少的数据报。