squ*_*les 0 c sockets udp latency nonblocking
我正在编写一个从单个发件人接收UDP数据报的客户端.所有IO都将在一个线程中完成.通常,将没有数据或30 MBit/s流.我主要担心的是尽可能降低延迟.
计划是在短时间超时的循环中阻塞,等待数据,以便IO线程可以响应关闭请求等.
我倾向于使用阻塞套接字,在其上设置超时,并进行recvfrom()呼叫.但是,这似乎比非阻塞套接字上的select()/ poll()和recvfrom()组合要少得多.
鉴于我只使用单个套接字,似乎非阻塞方法不必要地复杂化.我错过了别的什么吗?在这种特殊情况下,是否有理由选择非阻塞套接字?
如果你有一个专门的线程来处理套接字,那么异步I/O select等是没用的.您想要的只是简单recvfrom(2)并尽快处理数据.
任何花哨机制(epoll,libaio,等)不会帮助你获得更快的速度从你的应用程序.