网上已有很多关于这两个函数的效率问题的文章,在这里不再累述。
本文主要对两个函数的编程细节问题,进行分析。
epoll使用et模式。select使用非阻塞模式
共用代码
1。设置句柄为非阻塞方式
2。创建监听句柄并打开监听
测试场景
1。客户端发送数据后等待,服务器端不对到达数据进行读取。
目的:测试如果有事件到达,但处理结束后管道内仍然有数据存留,各种i/o复用模式是否仍对此事件作出相应。
结果:
1)epoll在数据到达后被唤醒,处理完业务流程后(不对socket管道内数据进行读取),又被阻塞到epoll_wait上。
2)select在数据到达后被唤醒,处理完业务流程后(不对socket管道内数据进行读取),select会再次被唤醒。