室内设计师联盟app搜索引擎优化免费
web/
2025/10/7 18:16:14/
文章来源:
室内设计师联盟app,搜索引擎优化免费,wordpress 模板 使用,上海网站制作的select和poll都只提供了一个函数:select或者poll函数。而epoll提供了三个函数#xff0c;epoll_create,epoll_ctl和epoll_wait#xff0c;epoll_create是创建一个epoll句柄#xff1b;epoll_ctl是注册要监听的事件类型#xff1b;epoll_wait则是等待事件的产生。epoll除了提…select和poll都只提供了一个函数:select或者poll函数。而epoll提供了三个函数epoll_create,epoll_ctl和epoll_waitepoll_create是创建一个epoll句柄epoll_ctl是注册要监听的事件类型epoll_wait则是等待事件的产生。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外还提供了边缘触发(Edge Triggered)这就使得用户空间程序有可能缓存IO状态减少epoll_wait/epoll_pwait的调用提高应用程序效率。水平触发(level-trggered)只要文件描述符关联的读内核缓冲区非空有数据可以读取就一直发出可读信号进行通知当文件描述符关联的内核写缓冲区不满有空间可以写入就一直发出可写信号进行通知LT模式支持阻塞和非阻塞两种方式。epoll默认的模式是LT。边缘触发(edge-triggered)当文件描述符关联的读内核缓冲区由空转化为非空的时候则发出可读信号进行通知当文件描述符关联的内核写缓冲区由满转化为不满的时候则发出可写信号进行通知两者的区别在哪里呢水平触发是只要读缓冲区有数据就会一直触发可读信号而边缘触发仅仅在空变为非空的时候通知一次LT(level triggered)是缺省的工作方式并且同时支持block和no-block socket.在这种做法中内核告诉你一个文件描述符是否就绪了然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作内核还是会继续通知你的所以这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表水平触发和边缘触发模式区别读缓冲区刚开始是空的读缓冲区写入2KB数据水平触发和边缘触发模式此时都会发出可读信号收到信号通知后读取了1kb的数据读缓冲区还剩余1KB数据水平触发会再次进行通知而边缘触发不会再进行通知所以边缘触发需要一次性的把缓冲区的数据读完为止也就是一直读直到读到EGAIN为止EGAIN说明缓冲区已经空了因为这一点边缘触发需要设置文件句柄为非阻塞//水平触发ret read(fd, buf, sizeof(buf));//边缘触发while(true) {ret read(fd, buf, sizeof(buf);if (ret EAGAIN) break;}设置方法int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);epoll的事件注册函数它不同与select()是在监听事件时告诉内核要监听什么类型的事件而是在这里先注册要监听的事件类型。第一个参数是epoll_create()的返回值第二个参数表示动作用三个宏来表示EPOLL_CTL_ADD注册新的fd到epfd中EPOLL_CTL_MOD修改已经注册的fd的监听事件EPOLL_CTL_DEL从epfd中删除一个fd第三个参数是需要监听的fd第四个参数是告诉内核需要监听什么事struct epoll_event结构如下struct epoll_event {__uint32_t events; /* Epoll events /epoll_data_t data; / User data variable */};events可以是以下几个宏的集合EPOLLIN 表示对应的文件描述符可以读(包括对端SOCKET正常关闭)EPOLLOUT表示对应的文件描述符可以写EPOLLPRI表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来)EPOLLERR表示对应的文件描述符发生错误EPOLLHUP表示对应的文件描述符被挂断EPOLLET 将EPOLL设为边缘触发(Edge Triggered)模式这是相对于水平触发(Level Triggered)来说的。EPOLLONESHOT只监听一次事件当监听完这次事件之后如果还需要继续监听这个socket的话需要再次把这个socket加入到EPOLL队列里。使用示例使用ET的例子:nginx使用LT的例子:redis
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88614.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!