高性能编程之IO复用之epoll
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相关推荐
- 网络套接字编程之IO模型详解
网络套接字编程之IO模型详解 本文主要参考自<UNIX网络编程>(第1卷)(套接口API第3版) Unix下可用的五种I/O模型有: 阻塞式I/O 非阻塞式I/O I/O复用(select ...
- 使用多线程还是用IO复用select/epoll? epoll 或者 kqueue 的原理是什么?
原作者:蓝形参 原文:http://www.zhihu.com/question/20114168/answer/14024115 使用多线程还是用IO复用select/epoll? 多线程模型适用于 ...
- 深入理解Linux IO复用之epoll
作者:后端技术指南针 来自:后端技术指南针 0.概述 通过本篇文章将了解到以下内容: I/O复用的定义和产生背景Linux系统的I/O复用工具epoll设计的基本构成epoll高性能的底层实现epol ...
- 后端服务器网络编程之 IO 模型
基本概念 在编写服务器端网络程序时,我们最常见到阻塞.非阻塞.同步和异步这四个词.它们的解释分别如下: 阻塞: 阻塞调用是指调用返回之前,当前线程会被挂起,只有当调用得到结果后才返回. 非阻塞:与 ...
- Unix网络编程之IO模型
首先,我们要了解IO模型先要知道在底层操作系统是通过哪些设备来实现数据的传输,其次要了解IO模型中哪些是发生阻塞调用操作,然后有了上述的基本认知之后,开始来了解IO模型是如何演进,最后通过IO模型的演 ...
- 网络编程之IO多路复用
目录 一. 同步与阻塞 1.1 同步阻塞 1.2 同步非阻塞 1.3 异步阻塞 1.4 异步非阻塞 1.5 I/O多路 二.多路复用的技术 2.1 UNIX I/O Models 2.1.1 bloc ...
- IO复用之epoll系列
epoll是什么? epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的 ...
- linux socket recv函数如何判断收完一包_linux 下经典 IO 复用模型 epoll 的使用
1. 概述 epoll 是 linux 内核为处理大批量文件描述符而对 poll 进行的改进版本,是 linux 下多路复用 IO 接口 select/poll 的增强版本,显著提高了程序在大量并发连 ...
- python编辑程序模型_python并发编程之IO模型
了解新知识之前需要知道的一些知识 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调 ...
最新文章
- 构建未来情报体系—— AI及大数据时代情报分析人员的战略价值
- JavaScript继承的多种方式和优缺点
- 【Paper】2022_多无人机系统的分布式最优编队控制
- python安装不了jupyter_python学习笔记——Windowns下Python3之安装jupyter
- 如何查看mysql8.0的默认密码_MySQL8.0安装之后查找默认密码
- 在ListView控件中绘底图
- 4.ID主键生成策略
- mysql提高count_mysql count提高方法总结
- RTK_LIB 源码、可执行文件、rtkget、观测文件、星历文件(精密星历、广播星历)、精密钟差文件介绍
- java字体除了宋体,为什么许多中文网站的主要字体仍然采用宋体而不是微软雅黑?...
- 程序员进阶必备--写文档
- 什么叫嵌入式开发 嵌入式开发的要求
- c语言vc怎么改变背景板颜色,VC设置视图背景颜色方法
- Xcode 报错及解决办法汇总
- java创建工厂方法_Java设计模式(八) 之创建型模式(工厂方法模式)
- RFC2617- HTTP Authentication自译本-(3) (转)
- 360 度反馈过程的目标
- 【光电工程实训】红外测温枪 红外辐射原理 测量影响因素探究标定
- MFC隐藏进程自身(任务管理器不可见,wSysCheck等工具可见)
- 解决九号老C(C30/C40/C60/C80)电动车坐垫感应失灵的问题
热门文章
- CS224d lecture 9札记
- maven的基本用法
- Shp数据批量导入Postgresql工具的原理和设计
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
- linux学习(7)第七章、Linux 文件与目录管理
- Go语言_array,slice,map
- 网易新闻 鸿蒙,本报记者体验华为首款鸿蒙产品
- 静态文件之static+url控制系统(萌新笔记)
- android最优化启动画面,Android启动页黑屏及最优解决方案
- vf程序设计与c语言,周四的C语言和VF,这些你有了么?