解放多线程支持

use*_*343 3 multithreading libevent

我有一些关于libevent2及其多线程支持的问题.

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

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

是不是可以用libevent做这样的事情?或者还有其他方法来支持多核吗?

非常感谢你

kai*_*nan 9

如果你添加evthread_use_pthreads();你必须有-levent_pthreads

例:

gcc chat.c -o chat -levent -lpthread -levent_threads
Run Code Online (Sandbox Code Playgroud)

和:

$> 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
Run Code Online (Sandbox Code Playgroud)


nic*_*ckm 7

您需要一些线程池支持.从2.0.x开始,Libevent现在没有内置其中一个,但它可能在未来.

您可能希望了解一些建议的扩展.Mark Ellzey有一个名为"libevthr"的库,他在libevhtp中用于线程池.您可以在libevhtp存储库中找到.Mark Heily有一个建议的补丁来添加一个EV_PARALLEL标志,让Libevent使用libpthread_workqueue. 它出现在libevent-users邮件列表中.

如果这些都不适合你,你可以通过选择你喜欢的任何工作队列实现来自己完成,并编写一个Libevent回调来自动为另一个线程排队真正的回调.

  • 嘿尼克,如果我添加evthread_use_pthreads(); 到我的代码我收到错误:未定义引用`evthread_use_pthreads'要编译我使用以下命令:"gcc chat.c -o chat -levent -lpthread"我想,我需要链接其他东西,但我不知道什么.你能帮帮我吗?谢谢. (2认同)