首页 > 其他分享 >eventPollerPool-Pipe 分析

eventPollerPool-Pipe 分析

时间:2024-01-26 13:34:44浏览次数:36  
标签:分析 触发 event Pipe LT EPOLLET eventPollerPool EPOLLEXCLUSIVE Event

1.eventPoller 分析

1.1 event设置:


基本知识
详见man epoll

Level-triggered and edge-triggered /水平触发 和边沿触发/
LT: 水平触发 没有标识;
ET: 边沿触发 EPOLLET;

默认触发方式是水平触发,什么标识都不用指定,
如果要指定边沿触发,则指定为EPOLLET;

参考文章:
https://blog.csdn.net/albertsh/article/details/123958013

对于水平触发模式,一个事件只要有,就会一直触发。
对于边缘触发模式,只有一个事件从无到有才会触发。

LT模式下,读事件触发后,可以按需收取想要的字节数,不用把本次接收到的数据收取干净,
ET模式下,读事件触发后通常需要数据一次性收取干净。

---zltoolKit定义
在eventPoller类中定义了:

    typedef enum {
        Event_Read = 1 << 0, //读事件
        Event_Write = 1 << 1, //写事件
        Event_Error = 1 << 2, //错误事件
        Event_LT = 1 << 3,//水平触发
    } Poll_Event;

event的不同的事件,zltoolKit 先使用LT水平触发,否则才使用ET边沿触发;

Event_Read、Event_Write、Event_Error、Event_LT 都是zltoolkit自己定义的


其中还定义了;

//防止epoll惊群
#ifndef EPOLLEXCLUSIVE
#define EPOLLEXCLUSIVE 0
#endif

解析:

ev.events = (toEpoll(event)) | EPOLLEXCLUSIVE;

设置event的掩码类型,用于设置不同的类型:

在文件EventPoller.cpp定义了宏如下:


#define toEpoll(event)        (((event) & Event_Read)  ? EPOLLIN : 0) \
                            | (((event) & Event_Write) ? EPOLLOUT : 0) \
                            | (((event) & Event_Error) ? (EPOLLHUP | EPOLLERR) : 0) \
                            | (((event) & Event_LT)    ? 0 : EPOLLET)

ev.events = (toEpoll(event)) | EPOLLEXCLUSIVE;

代入展开:

#define toEpoll(event)        (((event) & Event_Read)  ? EPOLLIN : 0) \
                            | (((event) & Event_Write) ? EPOLLOUT : 0) \
                            | (((event) & Event_Error) ? (EPOLLHUP | EPOLLERR) : 0) \
                            | (((event) & Event_LT)    ? 0 : EPOLLET) | EPOLLEXCLUSIVE 

方式:
使用条件运算符:

event与Event_Read、Event_Write、Event_Error、Event_LT 分别按位求“与&”,
如果求的值是true,则使用“:”前面的表达式,否则使用后面的表达式;

因此:

Event_Read 与 EPOLLIN 是一致的;
Event_Write 与 EPOLLOUT 是一致的;
Event_Error 与EPOLLHUP| EPOLLERR 是一致的;
Event_LT 与0是一致的,否则就是 边沿触发,EPOLLET | EPOLLEXCLUSIVE;

特别注意:

注意在电平选择的方式:
例如:
((event) & Event_LT) ? 0 : EPOLLET)
如果是LT水平触发,设置为0;否则设置为边沿触发EPOLLET;

--解析完毕;

标签:分析,触发,event,Pipe,LT,EPOLLET,eventPollerPool,EPOLLEXCLUSIVE,Event
From: https://www.cnblogs.com/Oztaking/p/17989122

相关文章

  • 【生产制造专栏】紧固件成本分析及控制规则
    随着高端装备制造业的快速发展,对技术创新的需求也是迫在眉睫,作为企业技术创新和科技成果转化重要载体的工艺技术,一直是企业核心竞争力的重要体现。 工艺是否科学合理,直接决定了产品的质量、成本和制造效率,《中国制造2025》明确提出了“建立基础工艺创新体系,开展先进成型、加工......
  • 记一次 .NET某工控自动化系统 崩溃分析
    一:背景1.讲故事前些天微信上有位朋友找到我,说他的程序偶发崩溃,分析了个把星期也没找到问题,耗费了不少人力物力,让我能不能帮他看一下,给我申请了经费,哈哈,遇到这样的朋友就是爽快,刚好周二晚上给调试训练营的朋友分享GC标记阶段相关知识,而这个dump所展示的问题是对这块知识的一个......
  • 安卓之用户数据安全现状以及相关技术优劣分析
    一、引言随着智能手机的普及,安卓平台已成为全球最大的移动操作系统之一。用户数据安全在安卓平台上变得日益重要,因为个人信息、金融交易和企业数据等都存储和传输于这些设备之中。本文将分析安卓平台上用户数据安全的现状,探讨保障数据安全的技术及其优劣,并讨论不同应用场景下的实践......
  • 安防视频汇聚平台智能边缘分析一体机视频算法分析识别打电话检测算法
    在智能视频监控的广阔舞台上,打电话检测算法如同一位细心的守护者,它基于图像处理和机器学习的先进技术,致力于识别和分析视频中的人物行为。这项技术不仅仅是一个简单的监控工具,它更是一种智能的分析手段,能够在复杂的场景中准确地判断个体是否在进行电话通话。首先,算法的工作流程是一......
  • 安防视频汇聚平台智能边缘分析一体机视频算法分析识别打电话检测算法
    在智能视频监控的广阔舞台上,打电话检测算法如同一位细心的守护者,它基于图像处理和机器学习的先进技术,致力于识别和分析视频中的人物行为。这项技术不仅仅是一个简单的监控工具,它更是一种智能的分析手段,能够在复杂的场景中准确地判断个体是否在进行电话通话。首先,算法......
  • 什么是真正的ChatGPT——ChatGPT的工作原理、优点和限制分析
     什么是真正的ChatGPT——ChatGPT的工作原理、优点和限制分析前言 ChatGPT是一种基于人工智能技术的智能聊天机器人,由OpenAI提供支持。它可以使用自然语言与用户进行交互,并回答各种问题。ChatGPT采用深度学习技术和大量数据来学习语言模式和上下文,并尝试在回答问题时提供......
  • github在线python数据分析JupyterLite配置
    1、登录个人github账号访问jupyterlite在github的网站,https://github.com/jupyterlite/demo,并将该仓库克隆到个人账户下;Usethistemplate --> ... 2、转到个人github界面下,点击图中设置部分 3、然后选择Pages选项,将默认行为改为GithubActions 4、接下来还需要......
  • 程序启停分析与进程常用API的使用
    进程是程序运行的实例,操作系统为进程分配独立的资源,使之拥有独立的空间,互不干扰。空间布局拿c程序来说,其空间布局包括如下几个部分:数据段(初始化的数据段):例如在函数外的声明,inta=1blockstartedbysymbol(未初始化的数据段):例如在函数外的声明,intb[10]栈:保存局部作用域......
  • SPSS Modeler决策树分类模型分析商店顾客消费商品数据
    全文链接:https://tecdat.cn/?p=34926原文出处:拓端数据部落公众号随着大数据时代的来临,数据挖掘和分析在商业决策中扮演着越来越重要的角色。商店的顾客消费行为数据是商业决策的关键信息之一,通过对这些数据的深入分析,可以更好地理解顾客的消费习惯和偏好,从而优化商品销售策略,提......
  • 核心指标下降了如何分析?
    1、确定数据来源是否可靠2、确定指标的计算口径是否一致3、确定是否市场的整体趋势4、描述性统计:下跌了多少,同环比下跌了多少5、细分拆解/相关分析:指标进行拆解,逐个进行假设验证6、定位原因:产品运营是否有动作,是否导致核心指标下跌7、回归分析/预测:还会跌几天,跌幅最坏到什么......