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. ioS html的转义
  2. 搞技术的OpenAI现在要做投资了,成立1亿美元创业基金,网友:融资花不完了?...
  3. python视频教程从入门到精通全集-零基础小白python从入门到精通视频(全60集)...
  4. 电商巨头纷纷入场中国农民丰收节交易会 谋定产销对接活动
  5. 现代JavaScript中的精美图案:制冰厂
  6. CentOS安装Oracle12C
  7. opencv-api minEnclosingCircle
  8. Go36-13-结构体及其方法
  9. 【网络安全工程师面试合集】—Web安全攻防技术演化
  10. 网络编程之 字节序和深入理解bind()函数
  11. C#中类的默认访问是私有的
  12. JavaScript async/await理解
  13. Blender插件BoxCutter 7.1.7v15 硬表面建模2.91+教程Box Cutter
  14. 湘潭大学java实验
  15. 将CSS文件转换为标准格式
  16. 计算机内存tm,Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz支持多大内存
  17. 《我是一只IT小小鸟》连载
  18. 【Python】进制、计算机中的单位、编码、数据类型、索引、字符串切片、字符串的功能方法
  19. 牛客BM99-顺时针旋转矩阵-C++
  20. Netty固定长度解码器

热门文章

  1. C++的一般引用及其数组引用
  2. Cubieboard2 debian
  3. 利用arcgis将execl数据可视化(点)
  4. 【转】修改static控件背景颜色和文字颜色
  5. 【转】Vue.js入门教程(二)在页面中引入vue的方式
  6. [你必须知道的.NET]第三十一回,深入.NET 4.0之,从“新”展望
  7. [你必须知道的.NET]第十八回:对象创建始末(上)
  8. linux 自动连接无限,hotplug应用实例:自动连接无线网
  9. 【编译原理】什么是上下文无关文法?
  10. iphone电压测试软件,‎App Store 上的“ECG Test Pro”