libevent与多线程

首先在进程中,libevent的一个base实际上就是一个while循环,当系统内核捕捉到事件发生时,它就会按照事件的优先级将这些捕捉到的事件,用注册时的回调函数处理。怎样和多线程一起用呢?我认为有两个解决方案。

一、将监听accept和连接connect注册到一个base上,当有事件触发时,开新的线程处理接受到的数据。

二、使用1+N个线程,每个线程一个base。

        1个监听线程,他只负责监听连接。有新的客户端连接进来时,将连接的socket交个某个线程处理。这里可以采用轮询策略。

        N个处理客户端业务的线程,每个线程只负责自己的客户端时间。线程间互不干扰。每个线程都应该有一对管道,业务线程监听读时间,监听线程则在有新的客户端连接时,将socket写到某个业务线程的队列里,并向该线程的管道写操作,以触发该线程的管道多事件,进而线程知道有个新的客户端需要自己服务,从队列里取出socket,并监听读事件。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值