xgw*_*ang 2 sockets linux select epoll
我是插座的新手,我正在学习/阅读一些epoll材料和代码.我的问题是,当epoll在系统(Linux)中可用时,epoll可以完全取代select/poll吗?
我认为套接字编程也应该有一些在实践中遵循的范例.当我阅读代码时,我发现一些"选择"带有"epoll":
服务器代码在处理阻塞套接字时使用select.我认为epoll(LT)的行为与select相同,所以可以使用epoll替换所有select.
一些遗留代码使用epoll进行监控.事件返回后,select在相应的fd上用于在读/写之前"检查"它.我不太确定这个"选择"的含义.
我对这些"选择"代码感到困惑,希望有人可以提供帮助.
是.
Select,Poll和epoll都针对相同的需求:要等到描述符准备好进行读取或写入,那么可以处理描述符(从中读取或写入它).
epoll是一个相对较新的实现,特定于Linux OS(因此,不可移植).它的优点是只返回挂起的描述符,而不需要传递所有描述符并检查哪一个导致系统调用返回.在许多情况下,epoll比select或poll更快.
将epoll与select声音混合使用就像遗留的代码一样,在没有重构旧代码的情况下进行修补.epoll将以更清洁,更快速的方式实现选择(在大多数情况下),正如您所提到的,可以在两种模式(边缘或级别)中的一种模式下工作.
有一些复杂的实例,epoll描述符可能嵌套在另一个epoll中,实现了一种层次结构,但我认为很少见,我个人从未见过它的代码实现.