我继承了一段从 UDP 套接字读取数据的代码。我需要一些帮助来弄清楚这里发生了什么,以及我是否可以提高任何性能。
代码首先调用 select(),然后调用 recvfrom()。根据我的研究,似乎只有在 select() 返回有可用数据的事实时才调用 recvfrom() 。这段代码基本上由一个持续监听多播消息的线程组成。结果,它基本上位于 select() 例程中,直到它接收到数据或超时。
我想知道是否有更好的方法来提高这段代码的性能。首先, select() 是否必要?基于这个线程:setting timeout for recv fcn of a UDP socket看来我可以设置 recvfrom() 命令本身的超时。这会给我带来什么吗?此外,根据一些研究,我已经看到很多没有 select() 的实现。为什么是这样?
另外,理想情况下,我想释放尽可能多的 CPU。有没有办法让进程进入睡眠状态,直到它收到一个数据包?话虽如此,为了简单起见,我想一次收到一个完整的数据包。
在此先感谢您的帮助。