标题已经说明了一切。
“...”也包括pselect和ppoll。
我正在处理一个基于多线程的服务器项目。每个线程处理一个或多个会话。所有线程都是相同的。协议负责确定哪个线程将托管会话。
我正在使用一个内部套接字类来封装事物。值得注意的是checkread调用,它调用poll(Linux)或select(Windows)。
总之,每个线程当前对单个套接字调用poll。从我所看到的情况来看,仅当此线程查看多个套接字时,例如在HTTP服务器中可以获得的内容时,使用epoll才会有益处。这不是我在本例中所做的。而且该类一次只处理一个套接字。
在epoll的man页面中有关于边沿和水平触发的简短讨论。我不是很确定这是什么意思。在套接字类中,我在代码的Windows部分中看到一种优化,通过ioctlsocket&FIONREAD来快捷地跳过选择调用,以检查是否有任何数据。想知道即使在调用时没有完整的UDP数据包是否到达,这是否会返回> 0。这就是epoll中边缘触发的含义吗?
在一些基本测试中,我也看不到使用select和poll之间的明显差异。
我可以看到使用ppoll可能会有好处,因为它具有更高的超时精度。你有什么想法吗?
是的,我正在尝试优化接收大量数据的会话的吞吐量。服务器比CPU更受网络和磁盘约束。
select
,因为select
是O(max fd number)
,而poll
是O(number of fds in the request)
。 - o11c