Nginx --->epoll模型
Apache --->select模型
处理大量连接的读写时,Apache所采用的select网络I/O模型比较低,用两个通俗的比喻来解释二者的区别:
第一个比喻:
例如你在大学读书,住的宿舍楼有很多房间,你的朋友要来找你,select版宿管大妈就会
带着你的朋友到各个房间挨个去找,直到找到为止。而epoll版宿管大妈会先记下每位入住同学的房间号码,当你朋友来找你时,只需告诉你的朋友你住在哪个房间?不用亲自带着你的朋友满宿舍的找。如果同时来了100个人,都要找自己住这栋楼的同学,select版宿管大妈和epoll版宿管大妈说的效率高,就很明显了。
第二个比喻:
select调用复杂度是线性的,即O(n)。举个例子,一个保姆照看一群孩子,如果把孩子是否需要尿尿比作网络I/O事件,select的作用就好比这个保姆挨个询问每个孩子“你要尿尿吗?”,如果孩子的回答是,保姆则把孩子领出来放到另外一个地方。当所有孩子询问完之后,保姆领着这些需要尿尿的孩子去上厕所(处理网络I/O事件)。而epoll机制下,保姆不再需要挨个询问每个孩子,取而代之的是,约定好的地方是否有孩子。如果有,则领着孩子去上(处理网络I/O事件),因此,这种机制能够高效的处理成千上万的并发连接,而且性能不会随着连接数增加而下降太多。
转载于:https://blog.51cto.com/perter/1842917