我对libevent2及其多线程支持有一些问题。
libevent支持多个线程吗?我想实现的是这样的目标:
- 在单个线程中创建一个event_base。
- 在此单线程设置中,设置事件并将它们关联到事件库。还为每个观察到的事件注册回调
- 一旦观察到的事件发生,就在其他(工作线程)线程中执行已注册的回调
有可能用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回调来自动为另一个线程排队你的实际回调。