select和epoll
2024-08-27 09:57:32
C/S编程模型,对每一个客户端都要开辟一个新的线程,效率必定低下。普通select模型是开辟两个线程,一个用来监听客户端的连接,另一个用于处理客户端请求。
fd_set set;
FD_ZERO(&set);// 将set清零,使得集合中不包含任何fd
FS_SET(fd, &set);// 将fd加入set集合
FS_CLR(fd, &set);// 将fd从set集合中清除
FD_ISSET(fd, &set);// 检测fd是否在set集合中,存在返回true
普通select的缺点在于需要一个死循环不停地遍历所有客户端的套接字集合,当连接的客户端较多时,势必影响客户端请求的效率,有点是解决了对每个客户端都要开线程的问题。如果能由轮询变为系统通知就好了。
使用select,有IO事件发生了,但是并不知道是那几个流,只能无差别轮询,有O(n)的无差别轮询复杂度,同时处理的流越多,每一次无差别轮询的时间就越长。
epoll不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的IO时间通知我们。
最新文章
- Leetcode-190 Reverse Bits
- php获取html纯文本,解决编辑器手动键入空格造成的无意义空白字符(空值问题)
- ios枚举规范
- 【Beta】Scrum01
- 在sublime-text中设置浏览器预览
- Intel+Ardruino 101
- Making the impossible: 3 nodes intercontinental replication--转载
- struts2官方演示程序总结struts2-blank
- SharePoint采用BCS开发第一个应用程序(两)
- 项目构建之maven篇:2.HelloWorld项目构建过程
- cocos creator主程入门教程(五)—— 日志系统
- (链表 importance) leetcode 2. Add Two Numbers
- Ubuntu 开启远程登录 SSH 的安装和配置
- Jenkins可持续集成项目搭建——配置邮件
- python基础之Day18
- makefile中的wildcard 、patsubst、
- interface21 - web - ContextLoaderListener(Spring Web Application Context加载流程)
- A1039. Course List for Student
- C++中的break,continue和return语句小结
- [Unity动画]05.Entry &; Exit &; Any State