【发布时间】:2012-05-26 05:04:34
【问题描述】:
我一直在围绕 UDP 进行自定义以使其可靠。我有这个设计问题,只有在我的整个程序准备好并开始将数据包从源发送到接收器之后我才意识到。
场景: 我创建了一个用于接收数据包的线程。父母做数据包发送工作。由于这只是一个 POC,我将缓冲区和公共数据结构作为全局指针保存,父级在堆上为其分配内存。我正在使用互斥锁处理关键内存部分。
作为可靠性的一部分,除了数据包之外,我还通过一些控制包发送。在任何时候,客户端都会发送数据包并从服务器接收控制包,而服务器将接收数据包并发送控制包。我使用的是单套接字,因为我的理解是 send 和 recv 在单套接字和默认阻塞上同时工作。
问题: 出于测试目的,我将 100 个数据包从源发送到接收器。不幸的是,服务器端的线程一直忙于接收数据包并将其存储在缓冲区中。在父线程获得上下文切换之前,服务器代码不会将数据包传递给应用程序。这增加了整体沟通中不可接受的延迟。
请帮助我理解,这是什么问题;可以进行哪些更改以提高性能?
提前致谢,凯达
【问题讨论】:
-
TCP 可能比 UDP 更可靠。为什么不能使用 TCP/IP 套接字?
-
要求适用于流媒体应用程序。 tcp 不太适合。
标签: c linux multithreading sockets udp