我有几个关于 libevent2 及其多线程支持的问题。
libevent 支持多线程吗?我想要实现的是这样的:
- 在单个线程中创建 event_base。
- 在这个单线程中设置事件并将它们关联到事件库。还要为每个观察到的事件注册回调。
- 一旦观察到的事件发生,就在其他(工作)线程中执行注册的回调。
有可能用 libevent 做这样的事情吗?或者有没有其他方法来支持多核?
非常感谢你
我有几个关于 libevent2 及其多线程支持的问题。
libevent 支持多线程吗?我想要实现的是这样的:
有可能用 libevent 做这样的事情吗?或者有没有其他方法来支持多核?
非常感谢你
如果你添加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-users 邮件列表中。
如果这些都不适合你,你可以自己做,选择你喜欢的任何工作队列实现,并编写一个 Libevent 回调来自动将你的真实回调排队到另一个线程。