epoll和select/poll(3)

select/poll/epoll的区别?(此处参考牛客某大神的解析,此类题目大家需要自己多多查阅,总结)一般人就会回答,轮询和回调的区别,深一点就是fd最大个数限制,因为select内部是数组实现、poll内部是链表实现,所以select有最大fd限制,poll没有限制(系统资源假设无穷大的话)。那么在深入一点可以是:select和poll它俩都有用户态到内核态拷贝的过程,两者的切换和数据拷贝都很消耗性能,而epoll是内部是一棵红黑树(或者是哈希表),这个数据结构效率很高,epoll还没有内核和用户态的切换,因为epoll内部采用了共享内存机制。用户态和内核态怎么切换?发生系统调用,异常,设备中断等,后面还可以更深,就不细说了。 

 

posted @ 2017-04-07 21:05  ren_zhg1992  阅读(117)  评论(0)    收藏  举报