4

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

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

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

有可能用 libevent 做这样的事情吗?或者有没有其他方法来支持多核?

非常感谢你

4

2 回答 2

11

如果你添加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
于 2013-05-14T02:59:53.020 回答
7

您需要对线程池的一些支持。从 2.0.x 开始,Libevent 现在还没有内置其中之一,但将来可能会。

您可能想要研究一些建议的扩展。Mark Ellzey 有一个名为“libevthr”的库,他将其用于 libevhtp 中的线程池。您可以在 libevhtp 存储库中找到它。Mark Heily 有一个提议的补丁来添加一个 EV_PARALLEL 标志,让 Libevent 使用 libpthread_workqueue。 它出现在 libevent-users 邮件列表中。

如果这些都不适合你,你可以自己做,选择你喜欢的任何工作队列实现,并编写一个 Libevent 回调来自动将你的真实回调排队到另一个线程。

于 2012-02-16T03:48:37.020 回答