三者都是用于操作系统tcp包非阻塞监听,多路复用。解决大量客户端连接占用线程的问题。
select, poll几乎差不多,都是输入fd数组,告诉操作系统需要监听的资源(包括socket、文件句柄),操作系统会轮训文件描述数组,发现有设备就绪,则通知上层。否则继续阻塞。
epoll在大数量级别的fd监听下,效率会更高。
1、epoll基于时间驱动,属于fd数组后,操作系统采用事件发生后回调的形式,通知上层,不会不停的轮训所有的资源设备。(select、poll则不管设备状态是否变更,不停进行线性扫描,非常消耗系统资源)
2、epoll在将资源变更通知上层,是通过mmap内存共享的形式,而select和poll则采取了将资源描述从内核copy到用户区,很费资源。
从epoll是真正的消息驱动来看,epoll才是真正的NIO机制。