我一直致力于围绕UDP进行自定义,以确保其可靠性。我有这个设计问题,只有在我的整个程序准备就绪后才开始实现,我开始将数据包从源发送到接收器。
方案: 我创建了一个用于接收数据包的线程。父进行数据包发送作业。由于这只是一个POC,我将缓冲区和公共数据结构保留为全局指针,父级将在堆上分配内存。我正在使用互斥锁处理关键内存部分。
作为可靠性的一部分,我发送除数据包之外的一些控制包。客户端将在任何时间发送数据包并从服务器接收控制数据包,而服务器将接收数据包并发送控制数据包。我使用过单插座,因为我的理解是发送& recv在单个套接字和默认阻塞上同时工作。
问题: 出于测试目的,我将100个数据包从源发送到接收器。不幸的是,服务器端的线程忙于保持接收数据包并将其存储在缓冲区中。在父线程获得上下文切换之前,服务器代码不会将数据包传递给应用程序。这增加了整体沟通中不可接受的延迟。
请帮助我理解,问题是什么;什么可以改变以提高绩效?
先谢谢,Kedar
答案 0 :(得分:1)
由于您使用的是互斥锁,因此在发送数据包后在一个线程上释放互斥锁时,另一个线程应该使用该数据包。也许你不会很快发布互斥锁。
或者,让socket的select()方法为你处理unblock-on-receive。