我对libevent2及其多线程支持有一些疑问。

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

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

  • 可以用libevent这样做吗?还是有其他支持多核的方法?

    非常感谢你

    最佳答案

    您需要对线程池的一些支持。从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回调以自动将您的实际回调排队到另一个线程中,从而自己进行操作。

    10-06 14:04
    查看更多