Libevent多线程支持



我对libevent2及其多线程支持有一些问题。

libevent支持多个线程吗?我想实现的是这样的目标:

  1. 在单个线程中创建一个event_base。
    • 在此单线程设置中,设置事件并将它们关联到事件库。还为每个观察到的事件注册回调
  2. 一旦观察到的事件发生,就在其他(工作线程)线程中执行已注册的回调

有可能用libevent做这样的s.th吗?或者有其他方法可以支持多个核心吗?

非常感谢

如果添加evthread_use_pthreads();,则必须具有-levent_pthreads

示例:

gcc chat.c -o chat -levent -lpthread -levent_pthreads

和:

$> 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

您需要一些对线程池的支持。截至2.0.x,Libevent目前还没有内置其中一个,但将来可能会。

有一些提议的扩展,你可能想研究一下。Mark Ellzey有一个名为"libevthr"的库,用于libevhtp中的线程池。您可以在libevhtp存储库中找到它。Mark Heily提出了一个补丁,添加EV_PARALLEL标志,让Libevent使用libpthread_workqueue。它出现在这里的libevent用户邮件列表中。

如果这两种方法都不适合你,你可以自己选择任何你喜欢的工作队列实现,并编写一个Libevent回调来自动为另一个线程排队你的实际回调。

最新更新