首页 文章

可靠的UDP实现设计问题

提问于
浏览
0

我一直在围绕UDP进行自定义,以使其可靠 . 我有这个设计问题,只有在我的整个程序准备就绪后才开始实现,我开始将数据包从源发送到接收器 .

场景:我创建了一个用于接收数据包的线程 . 父进行数据包发送作业 . 由于这只是一个POC,我将缓冲区和公共数据结构保留为全局指针,父级将在堆上分配内存 . 我正在使用互斥锁处理关键内存部分 .

作为可靠性的一部分,我发送除了数据包之外的一些控制包 . 客户端将在任何时间发送数据包并从服务器接收控制数据包,而服务器将接收数据包并发送控制数据包 . 我使用过单个套接字,因为我的理解是send和recv同时在单个套接字和默认阻塞上工作 .

问题:出于测试目的,我将100个数据包从源发送到接收器 . 不幸的是,服务器端的线程忙于保持接收数据包并将其存储在缓冲区中 . 在父线程获得上下文切换之前,服务器代码不会将数据包传递给应用程序 . 这增加了整体通信中不可接受的延迟 .

请帮我理解,问题是什么;什么可以改变以提高性能?

在此先感谢,Kedar

1 回答

  • 1

    由于您使用的是互斥锁,因此在发送数据包后在一个线程上释放互斥锁时,另一个线程应该使用该数据包 . 也许你不会很快释放互斥锁 .

    或者,让socket的select()方法为您处理unblock-on-receive .

相关问题