libevent2.1.3(目前版本)是否支持多线程等,请教看法

时间:2022-06-01 13:02:07
1. libevent2.1.3(目前版本)内部是否支持多线程?
2. 不使用多线程的话,一般中型商业应用服务器是否可行?
3. 现在的情形:
       需要做一个服务器,提供四个端口,给四个互不相干的业务使用;
       可虑到业务上可能对效率有一定要求,而且四个业务理应互不干扰;
       所以想,做成至少四线程的是否会好一些。。。

网上查找了 "libevent + 多线程",没找到相关的介绍信息
知道的,给点看法,谢谢先。。。

19 个解决方案

#1


1 libevent 是提供的单线程分阻塞模式服务的开源库!

2 看具体需求吧!长连接,短连接这些要求!不过一般都会采用多线程处理的
   当然多进程处理也是可以的!
3 可以开一个线程池处理吧!
  如果不会频繁的线程开启关闭操作也也可以不开,就4个线程而已!
  应该没有问题!处理好异步问题就好!

 
  

#2


该回复于2013-09-04 19:34:19被版主删除

#3


管理员,帮忙删下上面的广告!!!

#4


引用 1 楼 max_min_ 的回复:
1 libevent 是提供的单线程分阻塞模式服务的开源库!

2 看具体需求吧!长连接,短连接这些要求!不过一般都会采用多线程处理的
   当然多进程处理也是可以的!
3 可以开一个线程池处理吧!
  如果不会频繁的线程开启关闭操作也也可以不开,就4个线程而已!
  应该没有问题!处理好异步问题就好!
  

开线程的话,event_add这种操作就要加锁保护了
如果 event_base支持多个的话,或许就不用锁什么的了(我们使用的这一层)。。。

工作中有用过这个么?libevent+多线程

#5


喜欢单线程 cpu有富余的话,多开几个进程便可……

#6


引用 5 楼 mstlq 的回复:
喜欢单线程 cpu有富余的话,多开几个进程便可……

谢谢,看来你是比较认同单线程的方式
因为都是非阻塞的方式,理论上是不用担心相互影响的问题
但,上级提议一个连接(短连接)创建一个线程来做
如果是个人的兴趣的话,我也会直接用单线程来做的

#7


引用 6 楼 ken_scott 的回复:
Quote: 引用 5 楼 mstlq 的回复:

喜欢单线程 cpu有富余的话,多开几个进程便可……

谢谢,看来你是比较认同单线程的方式
因为都是非阻塞的方式,理论上是不用担心相互影响的问题
但,上级提议一个连接(短连接)创建一个线程来做
如果是个人的兴趣的话,我也会直接用单线程来做的


上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

#8


引用 7 楼 kdkdvsq 的回复:
上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

工程中的别的服务器例子是动态创建的,没用线程池

刚又想了下,里面有一个业务不用多线程的话,很浪费资源(资源有多个,如果单线程做的话,1个资源就可以了,剩下的都用不上)

#9


引用 8 楼 ken_scott 的回复:
Quote: 引用 7 楼 kdkdvsq 的回复:

上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

工程中的别的服务器例子是动态创建的,没用线程池

刚又想了下,里面有一个业务不用多线程的话,很浪费资源(资源有多个,如果单线程做的话,1个资源就可以了,剩下的都用不上)


可能有些浪费的,因为可能其中某个业务此时并不做任何动作呢,类似线程挂起的状态,
这个时候可能就比较浪费资源了!
所以还是要综合考虑,到底是选多线程  还是单线程多进程 
亦或单线程(libevent库)+多线程!【比较频繁的业务用libevent,其他业务需要时才开启线程处理】


#10


引用 9 楼 max_min_ 的回复:
Quote: 引用 8 楼 ken_scott 的回复:

Quote: 引用 7 楼 kdkdvsq 的回复:

上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

工程中的别的服务器例子是动态创建的,没用线程池

刚又想了下,里面有一个业务不用多线程的话,很浪费资源(资源有多个,如果单线程做的话,1个资源就可以了,剩下的都用不上)


可能有些浪费的,因为可能其中某个业务此时并不做任何动作呢,类似线程挂起的状态,
这个时候可能就比较浪费资源了!
所以还是要综合考虑,到底是选多线程  还是单线程多进程 
亦或单线程(libevent库)+多线程!【比较频繁的业务用libevent,其他业务需要时才开启线程处理】

又想了想,其实,那个业务也存在等待响应的时候,做成非阻塞的,也可以同时(假象的)使用多个资源

如果可以的话,先用单线程做下看,效率不行,再引进多线程好了

#11


libevent支持多线程编程,每个事件需要关联到自己的event_base
用多线程也可以做!用异步的方法!

#12


引用 10 楼 ken_scott 的回复:
Quote: 引用 9 楼 max_min_ 的回复:

Quote: 引用 8 楼 ken_scott 的回复:

Quote: 引用 7 楼 kdkdvsq 的回复:

上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

工程中的别的服务器例子是动态创建的,没用线程池

刚又想了下,里面有一个业务不用多线程的话,很浪费资源(资源有多个,如果单线程做的话,1个资源就可以了,剩下的都用不上)


可能有些浪费的,因为可能其中某个业务此时并不做任何动作呢,类似线程挂起的状态,
这个时候可能就比较浪费资源了!
所以还是要综合考虑,到底是选多线程  还是单线程多进程 
亦或单线程(libevent库)+多线程!【比较频繁的业务用libevent,其他业务需要时才开启线程处理】

又想了想,其实,那个业务也存在等待响应的时候,做成非阻塞的,也可以同时(假象的)使用多个资源

如果可以的话,先用单线程做下看,效率不行,再引进多线程好了

单线程一点问题没有,如果你要处理上万请求时,可以考虑孵化多进程来实现。强制你使用多线程的领导估计也就听说过多线程而已

#13


引用 12 楼 spirit008 的回复:
Quote: 引用 10 楼 ken_scott 的回复:

又想了想,其实,那个业务也存在等待响应的时候,做成非阻塞的,也可以同时(假象的)使用多个资源
如果可以的话,先用单线程做下看,效率不行,再引进多线程好了

单线程一点问题没有,如果你要处理上万请求时,可以考虑孵化多进程来实现。强制你使用多线程的领导估计也就听说过多线程而已

只是建议创建线程来做子业务,呵呵,
你的“单线程一点问题没有”,让我踏实了不少,哈哈

#14


引用 11 楼 u011717322 的回复:
libevent支持多线程编程,每个事件需要关联到自己的event_base
用多线程也可以做!用异步的方法!

你的意思是:event_base支持多个?

目前四个业务互不相干,如果我开四个线程,每个线程创建一个event_base,就什么锁也不用了
是不是这样?

#15


引用 14 楼 ken_scott 的回复:
Quote: 引用 11 楼 u011717322 的回复:

libevent支持多线程编程,每个事件需要关联到自己的event_base
用多线程也可以做!用异步的方法!

你的意思是:event_base支持多个?

目前四个业务互不相干,如果我开四个线程,每个线程创建一个event_base,就什么锁也不用了
是不是这样?

不是的。
具体你看看这个:
http://www.cppblog.com/converse/archive/2009/01/12/71809.html

#16


引用 15 楼 u011717322 的回复:
Quote: 引用 14 楼 ken_scott 的回复:

你的意思是:event_base支持多个?

不是的。
具体你看看这个:
http://www.cppblog.com/converse/archive/2009/01/12/71809.html

之前看到过这个,谢谢。。。

#17


先问这么多,谢谢各位,结贴

#18


你的问题最后怎么解决的

#19


我想问两个问题:
1.正如你所说,创建多个event_base时,锁的问题怎么解决?
2.libevent单线程处理能力到底如何?
3.如果非要加入多线程或者线程池,在libevent操作的什么环节可以加入?

#1


1 libevent 是提供的单线程分阻塞模式服务的开源库!

2 看具体需求吧!长连接,短连接这些要求!不过一般都会采用多线程处理的
   当然多进程处理也是可以的!
3 可以开一个线程池处理吧!
  如果不会频繁的线程开启关闭操作也也可以不开,就4个线程而已!
  应该没有问题!处理好异步问题就好!

 
  

#2


该回复于2013-09-04 19:34:19被版主删除

#3


管理员,帮忙删下上面的广告!!!

#4


引用 1 楼 max_min_ 的回复:
1 libevent 是提供的单线程分阻塞模式服务的开源库!

2 看具体需求吧!长连接,短连接这些要求!不过一般都会采用多线程处理的
   当然多进程处理也是可以的!
3 可以开一个线程池处理吧!
  如果不会频繁的线程开启关闭操作也也可以不开,就4个线程而已!
  应该没有问题!处理好异步问题就好!
  

开线程的话,event_add这种操作就要加锁保护了
如果 event_base支持多个的话,或许就不用锁什么的了(我们使用的这一层)。。。

工作中有用过这个么?libevent+多线程

#5


喜欢单线程 cpu有富余的话,多开几个进程便可……

#6


引用 5 楼 mstlq 的回复:
喜欢单线程 cpu有富余的话,多开几个进程便可……

谢谢,看来你是比较认同单线程的方式
因为都是非阻塞的方式,理论上是不用担心相互影响的问题
但,上级提议一个连接(短连接)创建一个线程来做
如果是个人的兴趣的话,我也会直接用单线程来做的

#7


引用 6 楼 ken_scott 的回复:
Quote: 引用 5 楼 mstlq 的回复:

喜欢单线程 cpu有富余的话,多开几个进程便可……

谢谢,看来你是比较认同单线程的方式
因为都是非阻塞的方式,理论上是不用担心相互影响的问题
但,上级提议一个连接(短连接)创建一个线程来做
如果是个人的兴趣的话,我也会直接用单线程来做的


上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

#8


引用 7 楼 kdkdvsq 的回复:
上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

工程中的别的服务器例子是动态创建的,没用线程池

刚又想了下,里面有一个业务不用多线程的话,很浪费资源(资源有多个,如果单线程做的话,1个资源就可以了,剩下的都用不上)

#9


引用 8 楼 ken_scott 的回复:
Quote: 引用 7 楼 kdkdvsq 的回复:

上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

工程中的别的服务器例子是动态创建的,没用线程池

刚又想了下,里面有一个业务不用多线程的话,很浪费资源(资源有多个,如果单线程做的话,1个资源就可以了,剩下的都用不上)


可能有些浪费的,因为可能其中某个业务此时并不做任何动作呢,类似线程挂起的状态,
这个时候可能就比较浪费资源了!
所以还是要综合考虑,到底是选多线程  还是单线程多进程 
亦或单线程(libevent库)+多线程!【比较频繁的业务用libevent,其他业务需要时才开启线程处理】


#10


引用 9 楼 max_min_ 的回复:
Quote: 引用 8 楼 ken_scott 的回复:

Quote: 引用 7 楼 kdkdvsq 的回复:

上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

工程中的别的服务器例子是动态创建的,没用线程池

刚又想了下,里面有一个业务不用多线程的话,很浪费资源(资源有多个,如果单线程做的话,1个资源就可以了,剩下的都用不上)


可能有些浪费的,因为可能其中某个业务此时并不做任何动作呢,类似线程挂起的状态,
这个时候可能就比较浪费资源了!
所以还是要综合考虑,到底是选多线程  还是单线程多进程 
亦或单线程(libevent库)+多线程!【比较频繁的业务用libevent,其他业务需要时才开启线程处理】

又想了想,其实,那个业务也存在等待响应的时候,做成非阻塞的,也可以同时(假象的)使用多个资源

如果可以的话,先用单线程做下看,效率不行,再引进多线程好了

#11


libevent支持多线程编程,每个事件需要关联到自己的event_base
用多线程也可以做!用异步的方法!

#12


引用 10 楼 ken_scott 的回复:
Quote: 引用 9 楼 max_min_ 的回复:

Quote: 引用 8 楼 ken_scott 的回复:

Quote: 引用 7 楼 kdkdvsq 的回复:

上级提议一个连接(短连接)创建一个线程来做,是动态创建? 还是用线程池吧

工程中的别的服务器例子是动态创建的,没用线程池

刚又想了下,里面有一个业务不用多线程的话,很浪费资源(资源有多个,如果单线程做的话,1个资源就可以了,剩下的都用不上)


可能有些浪费的,因为可能其中某个业务此时并不做任何动作呢,类似线程挂起的状态,
这个时候可能就比较浪费资源了!
所以还是要综合考虑,到底是选多线程  还是单线程多进程 
亦或单线程(libevent库)+多线程!【比较频繁的业务用libevent,其他业务需要时才开启线程处理】

又想了想,其实,那个业务也存在等待响应的时候,做成非阻塞的,也可以同时(假象的)使用多个资源

如果可以的话,先用单线程做下看,效率不行,再引进多线程好了

单线程一点问题没有,如果你要处理上万请求时,可以考虑孵化多进程来实现。强制你使用多线程的领导估计也就听说过多线程而已

#13


引用 12 楼 spirit008 的回复:
Quote: 引用 10 楼 ken_scott 的回复:

又想了想,其实,那个业务也存在等待响应的时候,做成非阻塞的,也可以同时(假象的)使用多个资源
如果可以的话,先用单线程做下看,效率不行,再引进多线程好了

单线程一点问题没有,如果你要处理上万请求时,可以考虑孵化多进程来实现。强制你使用多线程的领导估计也就听说过多线程而已

只是建议创建线程来做子业务,呵呵,
你的“单线程一点问题没有”,让我踏实了不少,哈哈

#14


引用 11 楼 u011717322 的回复:
libevent支持多线程编程,每个事件需要关联到自己的event_base
用多线程也可以做!用异步的方法!

你的意思是:event_base支持多个?

目前四个业务互不相干,如果我开四个线程,每个线程创建一个event_base,就什么锁也不用了
是不是这样?

#15


引用 14 楼 ken_scott 的回复:
Quote: 引用 11 楼 u011717322 的回复:

libevent支持多线程编程,每个事件需要关联到自己的event_base
用多线程也可以做!用异步的方法!

你的意思是:event_base支持多个?

目前四个业务互不相干,如果我开四个线程,每个线程创建一个event_base,就什么锁也不用了
是不是这样?

不是的。
具体你看看这个:
http://www.cppblog.com/converse/archive/2009/01/12/71809.html

#16


引用 15 楼 u011717322 的回复:
Quote: 引用 14 楼 ken_scott 的回复:

你的意思是:event_base支持多个?

不是的。
具体你看看这个:
http://www.cppblog.com/converse/archive/2009/01/12/71809.html

之前看到过这个,谢谢。。。

#17


先问这么多,谢谢各位,结贴

#18


你的问题最后怎么解决的

#19


我想问两个问题:
1.正如你所说,创建多个event_base时,锁的问题怎么解决?
2.libevent单线程处理能力到底如何?
3.如果非要加入多线程或者线程池,在libevent操作的什么环节可以加入?

#20