select, poll, epoll


三者都是用于操作系统tcp包非阻塞监听,多路复用。解决大量客户端连接占用线程的问题。


select, poll几乎差不多,都是输入fd数组,告诉操作系统需要监听的资源(包括socket、文件句柄),操作系统会轮训文件描述数组,发现有设备就绪,则通知上层。否则继续阻塞。


epoll在大数量级别的fd监听下,效率会更高。

1、epoll基于时间驱动,属于fd数组后,操作系统采用事件发生后回调的形式,通知上层,不会不停的轮训所有的资源设备。(select、poll则不管设备状态是否变更,不停进行线性扫描,非常消耗系统资源)

2、epoll在将资源变更通知上层,是通过mmap内存共享的形式,而select和poll则采取了将资源描述从内核copy到用户区,很费资源。


从epoll是真正的消息驱动来看,epoll才是真正的NIO机制。


你可能感兴趣的:(select)