美文网首页
select, poll, epoll原理,简单了解一下

select, poll, epoll原理,简单了解一下

作者: Hualong_d64b | 来源:发表于2018-05-03 13:42 被阅读0次

今天简单了解了一下这三个函数,总体的感觉是系统性能提升的需求越来越明确,抽象出来的逻辑逐渐下沉到kernel中实现,没有亲手写一遍代码,但是读了一些示例代码,感觉使用上本质区别不大,都需要建立实例->注册fd->调用阻塞函数获取就绪的fd->处理fd,主要区别在内部实现上,还有一些小的差别在epoll的注册事件函数的功能上.

如果有理解的不对的地方希望不吝赐教.

演变过程

1. 阻塞/非阻塞式的IO模式,主要的消耗是线程,当服务器的连接数变多的时候,并发处理的瓶颈在于线程数量,线程消耗系统资源较多,所以并发数无法提高.

2. 使用select/poll/epoll函数,模式转变为多路复用,kernel选择好就绪的fd回传给用户态程序,可以是用单个线程处理多个连接,并发数量大大提高,

3.关于select,poll和epoll的性能上差别.

    3.1 不是特别确定.我个人的理解. select和poll在内部实现中遍历了所有的fd,并选择就绪的fd返回, 而epoll将这些fd和事件注册到更下层,在fd就绪后,下层调用注册事件,把fd加到就绪队列中,省去遍历的消耗.

    3.2 select,poll每次在阻塞的时候都把fd重新传入kernel一次,而epoll则是在调用ctl注册的时候拷贝一次就可以了.个人觉得这是一个小的改进不知道对性能的影响有多大.

参考文献:

select、poll、epoll之间的区别总结[整理]

Linux下I/O多路复用系统调用(select, poll, epoll)介绍

IO多路复用:select、poll、epoll示例

epoll man page

相关文章

网友评论

      本文标题:select, poll, epoll原理,简单了解一下

      本文链接:https://www.haomeiwen.com/subject/kxgihftx.html