• epoll


    eppll 即使使用ET模式,一个socket上的某个事件还是可能被触发多次,采用线程城池的方式来处理事件,可能一个socket同时被多个线程处理

    如果对描述符socket注册了EPOLLONESHOT事件,那么操作系统最多触发其上注册的一个可读、可写或者异常事件,且只触发一次。。想要下次再触发则必须使用epoll_ctl重置该描述符上注册的事件,包括EPOLLONESHOT 事件。

    EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里 

    例子:

            epoll_event event;

            event..data.fd=fd;

            evnet.events=EPOLLIN | EPOLLT |EPOOLLONESHOT

           epoll_ctl( epollfd,EPOLL_CTL_ADD , fd , &event );// 第一次添加

    epoll_wait 返回, 处理fd的读事件,一直读一直读,读到没有数据 ( errno==EAGAIN) ,这时才重置fd上的事件 


            epoll_event event;

            event..data.fd=fd;

            evnet.events=EPOLLIN | EPOLLT |EPOOLLONESHOT

           epoll_ctl( epollfd,EPOLL_CTL_MOD , fd , &event );

  • 相关阅读:
    什么是MIME
    bit/byte/英文字符/汉字之间的换算及java八大基本数据类型的占字节数
    js 上传文件大小检查
    java.toString() ,(String),String.valueOf的区别
    java 下载文件的样例
    回调函数分析
    IO流详析
    各个秒之间的换算率
    内边距:
    Less-6【报错+BOOL类型】
  • 原文地址:https://www.cnblogs.com/DreamKill/p/13260360.html
Copyright © 2020-2023  润新知