Epoll基本介绍

在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于 select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd 数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:
#define __FD_SETSIZE    1024
表示select最多同时监听1024个fd,当然,可以通过修改头文件再重编译内核来扩大这个数目,但这似乎并不治本。

所以先来看看二者的区别:

select的特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。但是如果连接很少的情况下, select和epoll的LT触发模式相比, 性能上差别不大。
这里要多说一句,select支持的句柄数是有限制的, 同时只支持1024个,这个是句柄集合限制的,如果超过这个限制,很可能导致溢出,而且非常不容易发现问题, TAF就出现过这个问题, 调试了n天,才发现:)当然可以通过修改linux的socket内核调整这个参数。
epoll的特点:epoll对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表࿰

(二十)深入浅出TCPIP之epoll的一些思考相关推荐

  1. (十八)深入浅出TCPIP之epoll的一些思考

    Epoll基本介绍 在linux的网络编程中,很长的时间都在使用select来做事件触发.在linux新的内核中,有了一种替换它的机制,就是epoll.相比于 select,epoll最大的好处在于它 ...

  2. (二十二)深入浅出TCPIP之实战篇—用c++开发一个http服务器

    在当前的网络编程专栏前十几篇文章里,我已经说明了TCPIP常用的一些原理,那么接下来我将逐步进入到实战编程阶段: 本篇文章我将带大家用C++做一个http服务器.既然想实现一个http服务器,首先必须 ...

  3. (十二)深入浅出TCPIP之Nagle算法

    未完待续 专栏其他文章: 理论篇: (一)深入浅出TCPIP之理解TCP报文格式和交互流程 (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上) (三)深入浅出TCPIP之再识TCP,理解T ...

  4. tcp当主动发出syn_(二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上)

    TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,而用三次握手恰恰可以满足以上两方面的需求! 1.三次握手 所谓的三次握手即TCP连接的建立.这个连接必须是一方主动 ...

  5. (二十)TCPIP面试宝典-进入大厂必备总结(中)

    TCP 作为传输层的协议,是一个IT工程师素养的体现,也是面试中经常被问到的知识点.在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位. 实际上这篇文章相当于是复习之前的网络基础部分.只不过 ...

  6. (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上)

    目录 1.三次握手 1.1 三次握手过程 1.2 TCP连接状态 1.3 TCP状态迁移路线分析 1.4 查看TCP状态命令

  7. (十三) 深入浅出TCPIP之TCP套接字参数

    专栏其他文章: 理论篇: (一)深入浅出TCPIP之理解TCP报文格式和交互流程 (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上) (三)深入浅出TCPIP之再识TCP,理解TCP四次挥 ...

  8. (十八)深入浅出TCPIP之HTTP和HTTPS

    专栏其他文章: 理论篇: (一)深入浅出TCPIP之理解TCP报文格式和交互流程 (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上) (三)深入浅出TCPIP之再识TCP,理解TCP四次挥 ...

  9. 深入浅出TCPIP之实战篇—用c++开发一个http服务器(二十一)

    专栏其他文章: 理论篇: (一)深入浅出TCPIP之理解TCP报文格式和交互流程 (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上) (三)深入浅出TCPIP之再识TCP,理解TCP四次挥 ...

最新文章

  1. CVPR 2019超全论文合集新鲜出炉!| 资源帖
  2. tomcat设置自动监听替换class文件
  3. Smobiler实现扫描条码和拍照功能(开发日志八)
  4. sklearn svm
  5. Python之 sklearn:sklearn.preprocessing中的StandardScaler函数的简介及使用方法之详细攻略
  6. 依赖注入容器Autofac的详解[转]
  7. bulk批量下载影像
  8. C程序设计语言现代方法15:编写大型程序
  9. 百度天链平台:企业区块链技术赋能产业创新落地
  10. 将表中的数据生成SQL脚本,在查询分析器中执行这些脚本后自动将数据导入到SQL Server中...
  11. 电源大师课笔记 2.3
  12. Unity3D开发资料
  13. C语言结构体(Struct)——摘自C语言学习网
  14. 【数学模拟卷总结】2022李林四套卷数学二第一套
  15. FillRect与FrameRect
  16. documents4j 实现Word文档、xlsx、等格式转换PDF文件
  17. 玉田新世纪计算机学校,玉田新世纪中等专业学校2021年招生简章
  18. UNIX下PageDown健如何捕捉
  19. Vue-组件嵌套之——父组件向子组件传值
  20. Android开发开源源代码

热门文章

  1. make xdb file.php,SCWS入门使用指南
  2. post修改服务器数据源,postgresql安装及配置超详细教程
  3. python alter table_python(pymysql)之mysql简单操作
  4. Web——Request请求
  5. LSGO软件技术团队2015~2016学年第四周(0921~0927)总结
  6. SharePoint List item数量超过5000的解决办法
  7. C#的变迁史03 - C# 3.0篇
  8. 第五节: Quartz.Net五大构件之Trigger的四大触发类
  9. 了解 SharePoint 2010 开发中的关键点
  10. Python如何创建相同值的数组/列表