bufferevent 在buffer数据一层封装底层socket.用户可直接针对buffer操作,带来很大方便性。但是在多线程使用时候,线程之间通讯不是很直接,是不能直接用bufferevent_enable和bufferevent_disable进行通讯的。libevent 主要是限制在本线程内操作,比如bufferevent_enable和bufferevent_disable。而bufferevent 中 主要是通过 bufferevent_disable和bufferevent_enable来控制事件回调的。 而要做到线程之间通讯,一般采用管道方式。思路如下:
一个主线程A,负责socket I/O、信号、超时分发;线程池B,作为工作线程。
A线程读到数据后,压入队列,然后发送信号给工作线程(sem_post);工作线程处理结果后,调用buffereven_write向bufferevent缓存内写入数据,然后写管道通知主线程;主线程回调管道读函数,在读函数内设置bufferevent_enable(bev,EV_WRIATE). 这样 就做到了 在同一线程内。
当然也可借鉴网上资料,在每个线程内都采用libevent方式,然后通过管道通讯。本思路中是通过信号灯方式来通知工作线程。
阅读(6634) | 评论(0) | 转发(2) |