【发布时间】:2011-08-04 14:04:33
【问题描述】:
标题确实说明了一切。
and ...的意思还包括pselect和ppoll..
我正在处理的服务器项目基本上是由多个线程构成的。每个 线程处理一个或多个会话。所有线程都是相同的。协议 负责托管会话的线程。
我正在使用一个内部套接字类来包装东西。兴趣点是一个 checkread 调用,它调用 poll (linux) 或 select (windows)。
总而言之,每个线程当前在单个套接字上调用 poll。据我所知,只有当这个线程正在查看多个套接字时,使用 epoll 才会有好处,比如你会得到一个 HTTP 服务器。在我的情况下,这不是我正在做的事情。并且该类一次只处理一个套接字。
在 epoll 的手册页中有一些关于边缘和电平触发的简短讨论。我不太确定这意味着什么。在套接字类中,我在代码的 windows 部分看到了一个优化,该优化使用 ioctlsocket 和 FIONREAD 来简化选择调用,以检查是否有任何数据。想知道即使在调用时没有完整的 UDP 数据包到达,它是否会返回 > 0。这就是epoll中的边缘触发吗?
在一些基本测试中,我也发现使用 select 和 poll 之间没有明显区别。
我可以看到使用 ppoll 可能会有好处,尽管由于超时的精度更高。有什么想法吗?
是的,我正在尝试优化接收大量数据的会话的吞吐量。服务器比 CPU 更受网络和磁盘限制。
【问题讨论】: