libevent,zeromq,和muduo三个网络库进行对比分析

本文对比分析了libevent,zeromq和muduo三个网络库。libevent使用数组定义TAILQ_HEAD和TAILQ_ENTRY,通过信号event处理,将信号转换成IO处理。它还涉及bufferevent的管理,包括低水位和高水位的设置,以及读写监听的处理。文章详细讲解了libevent如何处理信号事件和数据管理。" 127719975,15125086,算法解析:OJ题目1006~1010详细解答,"['算法', 'C++', '编程挑战', '编程学习', '在线判题平台']
摘要由CSDN通过智能技术生成

本文将libevent,zeromq,和muduo三个网络库进行对比分析:

libevent:

  • 1.数组定义TAILQ_HEAD和TAILQ_ENTRY:

    #define TAILQ_HEAD(name, type)                        \

    struct name {
                                   \

        struct type *tqh_first;    /* first element */            \

        struct type **tqh_last;    /* 二级指针指向最后一个type的tqe_prev变量 */        \

    }
    //和前面的TAILQ_HEAD不同,这里的结构体并没有name.即没有结构体名。

    //所以该结构体只能作为一个匿名结构体。所以,它一般都是另外一个结构体

    //或者共用体的成员

    #define TAILQ_ENTRY(type)                        \

    struct {
                                   \

        struct type *tqe_next;    /* next element */            \

        struct type **tqe_prev;    /* address of previous next element */    \

    }   

  • 2.信号event的处理
    采用统一事件源的方式来处理信号event,即将信号转换成IO来处理。
    统一事件源的工作原理如下:假如用户要监听SIGINT信号,那么在实现的内部就对SIGINT这个信号设置捕抓函数。此外,在实现的内部还要建立一条管道(pipe),并把这个管道加入到多路IO复用函数中。当SIGINT这个信号发生后,捕抓函数将会被调用。而这个捕抓函数的工作就是往管道写入一个字符(这个字符往往等于所捕抓到信号的信号值)。此时,这个管道就变成是可读的了,多路IO复用函数能检测到这个管道变成可读的了。换言之,多路IO复用函数检测到SIGINT信号的发生,也就完成了对信号的监听工作。
    具体实现细节:

    1.创建一个管道(实际上使用socketpair);

    2.为这个socketpair的一个读端创建一个event,并将之加入到多路IO复用函数的监听中;

    说明:以上2条都是在选定一个多路IO复用函数后,就会调用:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值