博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint1-基于Epoll架构的采集端程序框架设计\第1课-Epoll机制精通...
阅读量:4682 次
发布时间:2019-06-09

本文共 1071 字,大约阅读时间需要 3 分钟。

Epoll机制的精通

1、为什么要用Epoll

a、阻塞型IO与多路复用

阻塞型IO:某个进程要读取一个文件,该文件暂时是空文件,那么进程肯定读不到数据,那么进程有两个选择,1)忙等-进程不断查询文件是否有数据。2)阻塞IO方式:进程会去睡眠或者说休眠起来,把cpu让给别的进程使用,当文件有数据之后把这个睡眠的进程唤醒。

多路复用;有文件1,文件2,文件3,文件4,现在有一个进程,该进程同时要监控这4个文件,判断哪一个文件是可读的或者都是可读的,这个监控的过程就叫做多路复用,可理解为对多个文件或多个设备的监控。

 在我们之前学过的这么的函数里面哪一个函数即可以实现阻塞型IO又可以实现多路复用呢?就是select函数。

b、select

 

c、epoll

它可以实现阻塞IO,也可以实现多路复用。

与select相比的优点,它不需要遍历,因为当有条件满足要求的文件发生时,它不需要遍历,立马就知道是什么满足要求的文件导致的。相比与select而言它监控的文件数是没有上限的,而select是有上限的。

从而说明了epoll是linux系统中的最优秀的多路复用机制

2、怎么来使用epoll

在linux系统中使用man命令来

man epoll_create()

一般会使flag参数为0,那么二者的功能是一样的。返回值为创建的监听池的fd。

man epoll_ctl

epfd为监听池的描述符,op对监听池做什么操作,fd为事件所对应文件的fd,event为事件的类型,返回值0为成功,失败返回-1.

man epoll_wait

epfd为要等待或者要使用的监听池,events为事件的指针或数组(解释:事件1:A文件可写,事件2:A文件可读,事件3:C文件可写,当事件1和事件3发生了,那么会把事件1和事件3放到这个数组里面来),maxevents为允许的事件的多大数,timeout为-1时,则要等到事件发生为止,否则一直等待;也可以设置其他正值,其他值则为要等待的实际时间。

利用epoll机制来监听两个FIFO

 ep.c

记得也要把efd给关闭了!!!!!!!!!

calloc函数是分配空间,上面是分配100个event事件大小的空间。

编译gcc ep.c -o ep

编写两个程序分别对/tmp/fifo1和/tmp/fifo2进行文件写

ew.c

ew1.c

先执行./ep

再执行./ew  ./ew1

结果如下

 

转载于:https://www.cnblogs.com/gary-guo/p/6034366.html

你可能感兴趣的文章
Open vSwitch安装
查看>>
网站错误日志
查看>>
HashMap、HashTable、LinkedHashMap和TreeMap用法和区别
查看>>
document.domain 跨域问题[转]
查看>>
【Android】 No Activity found to handle Intent.
查看>>
Mysql 模糊匹配(字符串str中是否包含子字符串substr)
查看>>
Struts2 Action名称的搜索顺序
查看>>
C++ sort简单用法
查看>>
Oracle分区索引
查看>>
4.17上午
查看>>
IIS的ISAPI接口简介
查看>>
python:open/文件操作
查看>>
16 乘法口诀输出
查看>>
进程和线程的主要区别
查看>>
python的类的 静态属性 类方法 静态方法
查看>>
mac 常用地址
查看>>
鼠标经过切换图片
查看>>
比特、字节、K
查看>>
流程控制 Day06
查看>>
Linux下安装Tomcat
查看>>