解放多线程支持

时间:2012-02-05 22:09:56

标签: multithreading libevent

我有一些关于libevent2及其多线程支持的问题。

libevent是否支持多个线程? 我想要实现的是这样的:

  1. 在单个线程中创建event_base。
    • 在此单个线程设置事件中并将它们与事件库相关联。还为每个观察到的事件注册回调。
  2. 一旦发生观察到的事件,就在其他(工作人员)线程中执行已注册的回调。
  3. 有可能用libevent这样做吗?或者还有其他方法来支持多核吗?

    非常感谢

2 个答案:

答案 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回调来自动为另一个线程排队真实的回调。