【转载】libevent简单流程

    xiaoxiao2021-03-25  108

    转载自 这里

    事件处理流程 当应用程序向libevent注册一个事件后,libevent内部是怎么样进行处理的呢?下面的图就给出了这一基本流程。 1) 首先应用程序准备并初始化event,设置好事件类型和回调函数;这对应于前面第步骤2和3;

    2) 向libevent添加该事件event。对于定时事件,libevent使用一个小根堆管理,key为超时时间;对于Signal和I/O事件,libevent将其放入到等待链表(wait list)中,这是一个双向链表结构;

    3) 程序调用event_base_dispatch()系列函数进入无限循环,等待事件,以select()函数为例;每次循环前libevent会检查定时事件的最小超时时间tv,根据tv设置select()的最大等待时间,以便于后面及时处理超时事件;

    当select()返回后,首先检查超时事件,然后检查I/O事件; Libevent将所有的就绪事件,放入到激活链表中; 然后对激活链表中的事件,调用事件的回调函数执行事件处理;

    转载请注明原文地址: https://ju.6miu.com/read-5199.html

    最新回复(0)