epoll、SELECT、POLL

1、SELECT:select监听三类文件描述符,分别为writefds、readfds、exceptfds,调用select函数会阻塞,直到有描述符就绪,或者超时。

        select在几乎所有平台上都支持,其良好的跨平台支持也是一个优点。

缺点:①:select最大的缺陷就是单个进程打开的FD数是有限制的,默认值是1024。

           ②:socket采用轮询的方法,线性扫描一遍。

           ③:每次调用select,都需要把fd集合从用户态拷贝到内核态,在fd很多时会很大。

  2、POLL:本质上和select一样,将文件描述符拷贝入内核空间,然后查询描述符的状态。与SELECT的区别是它用链表存储描述符,所以没有最大连接数的限制。

3、EPOLL:

①:对于第一个缺点,epoll_ctl函数每次把新的描述符拷贝到内核事件表中去,而不是每次轮询的时候重复拷贝。

②:对于第二个缺点,epoll_ctl函数会为每个描述符指定一个回调函数,当描述符就绪时,就会调用回调函数,这个回调函数会把就绪的描述符加入就绪队列,epoll_wait的工作实际上就是检查就绪链表中有没有就绪的描述符。

③:epoll没有最大最大描述符限制。

EPOLL的ET和LT:

lt模式:当epoll_wait函数检测到事件发生时,将通知应用程序,如果应用程序不处理,那下次epollwait函数再次检测到该事件后,还是会通知应用程序,直到事件被处理。

ET模式:只要有事件发生,立即通知程序进行处理,后序的epollwait函数将不再检测到此事件,因此et模式降低了epoll的触发次数,提高了效率。

猜你喜欢

转载自blog.csdn.net/weixin_42634329/article/details/81699625
今日推荐