我有一些关于libevent2及其多线程支持的问题。
libevent是否支持多个线程? 我想要实现的是这样的:
有可能用libevent这样做吗?或者还有其他方法来支持多核吗?
非常感谢
答案 0 :(得分:9)
如果您添加evthread_use_pthreads();
,则必须-levent_pthreads
示例:
gcc chat.c -o chat -levent -lpthread -levent_threads
和
$> ls /usr/lib/libevent*.a
/usr/lib/libevent.a /usr/lib/libevent_core.a /usr/lib/libevent_extra.a /usr/lib/libevent_openssl.a /usr/lib/libevent_pthreads.a
答案 1 :(得分:7)
您需要一些线程池支持。从2.0.x开始,Libevent现在没有内置其中一种,但可能在未来。
您可能希望了解一些建议的扩展。 Mark Ellzey有一个名为“libevthr”的库,他在libevhtp中用于线程池。你可以找到it in the libevhtp repository。 Mark Heily有一个建议的补丁来添加一个EV_PARALLEL标志,让Libevent使用libpthread_workqueue。 It appeared on the libevent-users mailing list here.
如果这些都不适合你,你可以自己选择你喜欢的任何工作队列实现,并编写一个Libevent回调来自动为另一个线程排队真实的回调。