epoll学习笔记

两种触发模式:

1.Edge Triggered(ET)边缘触发(“高速”模式):仅当状态发生变化时才会通知。只会提示一次,直到下次再有数据流入之前都不会再提示。


2.Level Triggered(LT)水平触发(默认):只要还有没有处理的事件就会一直通知(类似于select/poll操作)。只要fd还有数据可读,每次epoll_wait都会返回它的事件,提醒用户程序去操作。



阻塞与非阻塞是套接字层面的。

同步与异步是操作系统本身的概念。



Apache使用select/poll复用模式->轮询空闲的fd,代价:O(n)

epoll实现了对文件描述的“开关”设定,也就是回调机制,当一个fd准备就绪之后,它会主动去触发回调,通知用户程序自己已经就绪,不需要轮询,代价:O(1)



epoll的三个基本调用:

1.int epoll_create()创建一个epoll句柄,其实也是一个fd。


2.int epoll_ct(int epfd, int op, int fd, struct epoll_event * event)对一个epoll句柄epfd操作。

op(操作方式):   a.EPOLL_CTL_ADD添加一个句柄(fd)到epoll中。

                                 b.EPOLL_CTL_MOD修改句柄fd的监听方式。

                                 c.EPOLL_CTL_DEL从epoll中移除句柄fd。

fd:是操作数(也是一个文件句柄)

events:是事件属性,包括两部分:      a.event.data.fd:当前需要监听的句柄。

                                                                b.event.events:需要监听的事件类型集合(主要有下面8种事件类型)。

事件类型:  1.EPOLLIN:读事件;

                    2.EPOLLOUT:写事件;

                    3.EPOLLRDHUP:客户端半关闭;

                    4.EPOLLPRI:高优先级 读;

                    5.EPOLLERR:连接错误(不需要特别指定);

                    6.EPOLLHUP:客户端主动关闭(不需要特别指定);

                    7.EPOLLONESHOT:一次性使用;

                    8.EPOLLET:边缘触发。


3.int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout)等待(检查)epoll事件发生。

epoll:需要检查的epoll句柄;

events:结果暂存数组;

maxevents:可以返回的事件最大数;

timeout:等待时间(经常设为-1)。



epoll:多线程多进程。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值