linux select poll and epoll
2024-09-04 01:26:14
这里以socket文件来阐述它们之间的区别,假设现在服务器端有100 000个连接,即已经创建了100 000个socket。
1 select和poll
在我们的线程中,我们会弄一个死循环,在循环里面不断的进行select()。这个select()进入操作系统层面,会主动去调用每个socket文件的poll()函数,主动去询问是否有数据来了,然后返回所有数据ready的socket。也就是说,进行一次select(),它需要进行10 000次的询问。select和poll都是这样的。
2 epoll
在我们的线程中,我们也会弄一个死循环,在循环中不断的进行epoll_wait()。在这个epoll_wait()这个调用层级里面,直接去查看ready list里面是否有socket是ready的,如果有的话直接将这个list返回给用户空间,这个操作几乎是实时的。
那么这个ready list是怎么来的呢?
关键的思想很简单,将自己放入socket的wait queue中,一旦有数据来了,就会把它放入ready list中。
3 select/poll和epoll的主要区别
前者是无状态的,也就是说,内核并不保存所监视的文件的读写状态,当用户空间需要知道这些状态时,会调用内核的接口去现场查找。而后者是有状态的,后者在内核中弄了一个ready list,当有socket文件有数据时,就会自动加入到该ready list中,ready list中记录了所监视的文件的状态,这样,当用户空间想要知道这些状态时,直接查看就可以了,不需要再现场查找了。
最新文章
- 经验分享:CSS浮动(float,clear)通俗讲解
- [转]优秀Python学习资源收集汇总
- Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)
- 20145218 《Java程序设计》第7周学习总结
- 《Play for Java》学习笔记(七)数据类型解析——Body parser
- ios协议调起app
- ie6调试工具Debugbar
- shell 检测ip的合法性与检测网络掩码的合法性
- 开发设计模式(九)门面模式(Facade Pattern)
- 解决Access restriction问题
- JavaScript获取某年某月的最后一天
- 学习ExtjsForVs(第一个案例HelloWord)
- iOS https plist
- 其他信息: ORA-01400: 无法将 NULL 插入
- HTML基础下
- 项目部署、配置、查错常用到的Linux命令
- (十六)qt-udp,组播
- hibernate写list到mysql
- Error: Program type already present: com.google.gson.FieldAttributes 的解决方法
- jquery for&;&;each的用法