libevent之bufferevent的基本结构

  在bufferevent出现之前,我们通常先检测数据源输入buffer内是否有数据,如果有数据那么就将其中的数据写入到自己定义的缓冲区中。这样可能会发生频繁读写的问题。如果我们希望数据源中输入buffer积攒到一定量数据的时候再进行读写,那么就需要使用bufferevent了。图1显示了不使用bufferevent时对数据源进行读写的结构。
图1 不使用bufferevent的数据读写

 bufferevent的实现使得在用户定义的缓冲区和数据源之间又添加了一层,并且提供了一些机制使用户可以更高效的使用数据源的buffer。如图2所示,

图2 使用bufferevent的数据读写
支撑bufferevent机制的最重要的结构体是struct evebuffer.  该结构体定义了一个输入buffer和一个输出buffer。其中输入buffer是用来缓存从数据源的输入buffer中读取的数据,输入buffer是用来缓存从用户自定义缓冲区写入的数据。
当某个条件满足时,bufferevent对数据源进行读操作,这个读操作使用的是操作系统提供的接口,将数据源输入buffer中的数据读取到bufferevent的输入buffer中,在完成这个动作之后调用用户编写的函数(read_cb)执行相应的操作,比如说将bufferevent输入buffer中的数据读取到用户定义的缓冲区或者查看bufferevent的输入buffer中的数据等等。
当某个条件满足时,比如网络套接口可写,bufferevent通过调用操作系统提供搞得接口将其输出buffer写入到数据源的输出buffer中,然后调用用户编写的函数(write_cb)执行相应的操作。
到此为止,我们已经知道了libevent中为什么单独创建bufferevent机制,也知道了bufferevent机制的概况。在下一节我们将介绍怎样创建一个bufferevent。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值