Nginx之epoll和select poll
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会非常高效
相关推荐
xiemanR 2020-08-17
sweetgirl0 2020-06-28
Kakoola 2020-05-04
hoooooolyhu 2020-01-29
憧憬 2019-12-29
xiaobaichen 2019-11-05
lianweikj0 2019-11-04
spartmap 2019-11-03
hjhmpl 2019-11-03
四哥 2019-10-23
Proudoffaith 2019-10-29
过儿古墓 2011-02-07
齐天大圣数据候 2019-10-26
hell0kitty 2019-10-20
amethystqi 2012-02-04
zhenyaqi 2012-03-23