【问题标题】:Libevent Multithread SupportLibevent 多线程支持
【发布时间】:2012-02-27 12:56:41
【问题描述】:

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

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

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

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

非常感谢

【问题讨论】:

标签: multithreading libevent


【解决方案1】:

如果添加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】:

    您需要一些对线程池的支持。从 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 回调来自动将你的真实回调排队到另一个线程。

    【讨论】:

    • 嘿尼克,如果我添加 evthread_use_pthreads();在我的代码中,我收到错误:未定义对 `evthread_use_pthreads' 的引用要编译,我使用以下命令:“gcc chat.c -o chat -levent -lpthread”,我想,我需要链接其他东西,但我不知道什么。你能帮帮我吗?谢谢。
    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2017-07-04
    • 2023-03-26
    • 2011-10-14
    • 1970-01-01
    • 2011-03-04
    相关资源
    最近更新 更多