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时间通知我们。

最新文章

  1. Leetcode-190 Reverse Bits
  2. php获取html纯文本,解决编辑器手动键入空格造成的无意义空白字符(空值问题)
  3. ios枚举规范
  4. 【Beta】Scrum01
  5. 在sublime-text中设置浏览器预览
  6. Intel+Ardruino 101
  7. Making the impossible: 3 nodes intercontinental replication--转载
  8. struts2官方演示程序总结struts2-blank
  9. SharePoint采用BCS开发第一个应用程序(两)
  10. 项目构建之maven篇:2.HelloWorld项目构建过程
  11. cocos creator主程入门教程(五)—— 日志系统
  12. (链表 importance) leetcode 2. Add Two Numbers
  13. Ubuntu 开启远程登录 SSH 的安装和配置
  14. Jenkins可持续集成项目搭建——配置邮件
  15. python基础之Day18
  16. makefile中的wildcard 、patsubst、
  17. interface21 - web - ContextLoaderListener(Spring Web Application Context加载流程)
  18. A1039. Course List for Student
  19. C++中的break,continue和return语句小结
  20. [Unity动画]05.Entry & Exit & Any State

热门文章

  1. sql:PostgreSQL
  2. SJ定理——省选前的学习2
  3. java线程的常用方法
  4. 微信小程序-scroll-view组件
  5. (WCF) 利用WCF实现两个Process之间的通讯。
  6. 基于Apache Curator框架的ZooKeeper使用详解
  7. 服务器端的tomcat,servlet框架
  8. java笔记--String类对象解析与运用
  9. centos编译安装php7
  10. Java实例---简单的上课管理系统