2019独角兽企业重金招聘Python工程师标准>>>

epoll是linux特有的IO复用函数。

把用户关心的文件描述符上的事件放在内核里的一个事件表里,从而无须像select和poll

那样每次调用都要重复传入文件描述符或事件集。

#include<sys/epoll.h>

int epoll_create(int size).

size参数现在并不起作用,只是给内核一个提示:告诉它事件表需要多大。

该函数返回的文件描述符将用作其他所有epoll系统调用的第一个参数

以指定要访问的内核事件表。

#include<sys/epoll.h>

int epoll_ctl(int epfd,int op,int fd,struct epoll_event* event)

epoll支持的事件类型和poll基本相同,表示epoll的事件类型的宏是在poll对应的宏前加上E,

但是epoll有两个额外的事件类型EPOLLET和EPOLLONESHOT,

这个函数成功时返回0.失败时返回-1并且设置errno

int epoll_wait(int epfd,struct epoll_event* events, int maxevents, int timeout)

这个函数成功时返回就绪的文件描述符的个数,失败则返回-1并且设置errno

maxevents指定最多监听多少个事件,必须大于0

timeout参数同poll参数的timeout参数

epoll_wait函数如果检测到事件,就将所有就绪的事件从内核表中复制到第二个参数指向的数组中,

epoll对文件描述符有两种模式LT电平触发和ET边沿触发 默认是LT模式 ,

当往epoll内核事件表中注册EPOLLET事件时会以ET模式来操作该文件描述符。

即使我们使用边沿触发,仍然可能多次触发事件,

在某些特定情况下,可能会需要用到EPOLLONESHOT 这个事件。

对于注册了这个事件的文件描述符,操作系统最多触发其上注册的一个可读,可写,或者异常事件,

且只触发一次,所以在不需要继续使用这个socket的情况下,需要重置这个socket,否则永远不会再接收

到这个socket的有关事件。

~~~epoll的工作原理

内核监测到就绪的文件描述符时,将触发回调函数,回调函数就将该文件描述符上对应的事件插入内核就绪事件队列,内核最后在适当的时机将该就绪事件队列中的内容拷贝到用户空间。

转载于:https://my.oschina.net/qiangzigege/blog/194685

高性能编程之IO复用之epoll相关推荐

  1. 网络套接字编程之IO模型详解

    网络套接字编程之IO模型详解 本文主要参考自<UNIX网络编程>(第1卷)(套接口API第3版) Unix下可用的五种I/O模型有: 阻塞式I/O 非阻塞式I/O I/O复用(select ...

  2. 使用多线程还是用IO复用select/epoll? epoll 或者 kqueue 的原理是什么?

    原作者:蓝形参 原文:http://www.zhihu.com/question/20114168/answer/14024115 使用多线程还是用IO复用select/epoll? 多线程模型适用于 ...

  3. 深入理解Linux IO复用之epoll

    作者:后端技术指南针 来自:后端技术指南针 0.概述 通过本篇文章将了解到以下内容: I/O复用的定义和产生背景Linux系统的I/O复用工具epoll设计的基本构成epoll高性能的底层实现epol ...

  4. 后端服务器网络编程之 IO 模型

    基本概念   在编写服务器端网络程序时,我们最常见到阻塞.非阻塞.同步和异步这四个词.它们的解释分别如下: 阻塞: 阻塞调用是指调用返回之前,当前线程会被挂起,只有当调用得到结果后才返回. 非阻塞:与 ...

  5. Unix网络编程之IO模型

    首先,我们要了解IO模型先要知道在底层操作系统是通过哪些设备来实现数据的传输,其次要了解IO模型中哪些是发生阻塞调用操作,然后有了上述的基本认知之后,开始来了解IO模型是如何演进,最后通过IO模型的演 ...

  6. 网络编程之IO多路复用

    目录 一. 同步与阻塞 1.1 同步阻塞 1.2 同步非阻塞 1.3 异步阻塞 1.4 异步非阻塞 1.5 I/O多路 二.多路复用的技术 2.1 UNIX I/O Models 2.1.1 bloc ...

  7. IO复用之epoll系列

    epoll是什么? epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的 ...

  8. linux socket recv函数如何判断收完一包_linux 下经典 IO 复用模型 epoll 的使用

    1. 概述 epoll 是 linux 内核为处理大批量文件描述符而对 poll 进行的改进版本,是 linux 下多路复用 IO 接口 select/poll 的增强版本,显著提高了程序在大量并发连 ...

  9. python编辑程序模型_python并发编程之IO模型

    了解新知识之前需要知道的一些知识 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调 ...

最新文章

  1. 构建未来情报体系—— AI及大数据时代情报分析人员的战略价值
  2. JavaScript继承的多种方式和优缺点
  3. 【Paper】2022_多无人机系统的分布式最优编队控制
  4. python安装不了jupyter_python学习笔记——Windowns下Python3之安装jupyter
  5. 如何查看mysql8.0的默认密码_MySQL8.0安装之后查找默认密码
  6. 在ListView控件中绘底图
  7. 4.ID主键生成策略
  8. mysql提高count_mysql count提高方法总结
  9. RTK_LIB 源码、可执行文件、rtkget、观测文件、星历文件(精密星历、广播星历)、精密钟差文件介绍
  10. java字体除了宋体,为什么许多中文网站的主要字体仍然采用宋体而不是微软雅黑?...
  11. 程序员进阶必备--写文档
  12. 什么叫嵌入式开发 嵌入式开发的要求
  13. c语言vc怎么改变背景板颜色,VC设置视图背景颜色方法
  14. Xcode 报错及解决办法汇总
  15. java创建工厂方法_Java设计模式(八) 之创建型模式(工厂方法模式)
  16. RFC2617- HTTP Authentication自译本-(3) (转)
  17. 360 度反馈过程的目标
  18. 【光电工程实训】红外测温枪 红外辐射原理 测量影响因素探究标定
  19. MFC隐藏进程自身(任务管理器不可见,wSysCheck等工具可见)
  20. 解决九号老C(C30/C40/C60/C80)电动车坐垫感应失灵的问题

热门文章

  1. CS224d lecture 9札记
  2. maven的基本用法
  3. Shp数据批量导入Postgresql工具的原理和设计
  4. 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
  5. linux学习(7)第七章、Linux 文件与目录管理
  6. Go语言_array,slice,map
  7. 网易新闻 鸿蒙,本报记者体验华为首款鸿蒙产品
  8. 静态文件之static+url控制系统(萌新笔记)
  9. android最优化启动画面,Android启动页黑屏及最优解决方案
  10. vf程序设计与c语言,周四的C语言和VF,这些你有了么?