0

我一直在围绕 UDP 进行定制以使其可靠。我有这个设计问题,只有在我的整个程序准备好并且我开始将数据包从源发送到接收器之后我才意识到。

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

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

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

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

在此先感谢,凯达

4

1 回答 1

1

由于您使用的是互斥锁,因此在发送数据包后在一个线程上释放互斥锁时,另一个线程应该使用该数据包。也许您没有足够快地释放互斥锁。

或者,让套接字的 select() 方法为您处理 unblock-on-receive。

于 2012-05-26T05:24:59.617 回答