码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx之epoll和select poll

时间:2020-02-26 14:15:04      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:系统   观察   节点   复制   状态   操作   epo   sleep   nginx   

epoll和 select poll 都是做I/O多路复用的。

区别在于:

epoll较灵活,如果有一百万个链接状态同时保持,但是在某个时刻,只有几百个链接是活跃的。epoll的处理是通过epoll_create()创建对象,epoll_ctl()收集所有的套接字添加到epoll对象,epoll_wait()收集所有发生事件也就是所谓的活跃的链接,并收集到一个List链表中,这样只需要遍历这些List链表里的数据,而不用遍历一百万个链接。 而后者select poll则是每次收集事件时,将这一百万个链接都传给操作系统,再由操作系统内核上判断某些链接产生了事件,造成了巨大的资源浪费(大批量的不同态内存复制)。

 

为什么epoll效率比较高:

epoll 在epoll_create 时,就已经建立好了一个file节点。创建epoll对象, 同时,在内核cache里建立了一个红黑树,用于存储后续epoll_ctl传来的socket连接。再同时,又建立了一个list链表,用于存储准备就绪的事件。 等到epoll_wait()调用的时候,只需要观察list链表里有没有数据就可以,有数据就返回,没数据就sleep。等到timeout后,及时没数据,也返回了。所以epoll_wait会非常高效

Nginx之epoll和select poll

标签:系统   观察   节点   复制   状态   操作   epo   sleep   nginx   

原文地址:https://www.cnblogs.com/camouflage/p/12366648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!