没有合适的资源?快使用搜索试试~ 我知道了~
描述epoll机制,配套代码,可以对epoll有个基本了解。
资源推荐
资源详情
资源评论
在 的网络编程中,很长的时间都在使用 来做事件触发。在 新的内核中,
有了一种替换它的机制,就是 。
相比于 , 最大的好处在于它不会随着监听 数目的增长而降低效率。因为在内
核中的 实现中,它是采用轮询来处理的,轮询的 数目越多,自然耗时越多。并且,
在 头文件有这样的声明:
表示 最多同时监听 个 ,当然,可以通过修改头文件再重编译内核来扩大这个
数目,但这似乎并不治本。
的接口非常简单,一共就三个函数:
创建一个 的句柄,! 用来告诉内核这个监听的数目一共有多大。这个参数不同于
"#中的第一个参数,给出最大监听的 $ 的值。需要注意的是,当创建好 句柄
后,它就是会占用一个 值,在 下如果查看%进程 ,是能够看到这个 的,
所以在使用完 后,必须调用 "#关闭,否则可能导致 被耗尽。
的事件注册函数,它不同与 "#是在监听事件时告诉内核要监听什么类型的事件,
而是在这里先注册要监听的事件类型。
第一个参数是 %&"#的返回值,
第二个参数表示动作,用三个宏来表示:
'())*)+:注册新的 到 中;
'())*),(:修改已经注册的 的监听事件;
'())*)):从 中删除一个 ;
第三个参数是需要监听的 ,
第四个参数是告诉内核需要监听什么事,%- 结构如下:
%-.
/-01-1
&&&&012%&&-&%&31
40
- 可以是以下几个宏的集合:
'())5: 表示对应的文件描述符可以读(包括对端 (*6 正常关闭);
'())(2: 表示对应的文件描述符可以写;
'())'7: 表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到
来);
'())77: 表示对应的文件描述符发生错误;
'())82': 表示对应的文件描述符被挂断;
'()): 将 '()) 设为边缘触发"9%99%#模式,这是相对于水平触发 ")-
%99%#来说的。
'())(58(: 只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个
: 的话,需要再次把这个 : 加入到 '()) 队列里
资源评论
千秋万代永长存
- 粉丝: 1
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功