同一 fd 上不同线程中的多个 libevent 基础

Posted

技术标签:

【中文标题】同一 fd 上不同线程中的多个 libevent 基础【英文标题】:Multiple libevent bases in different threads on the same fd 【发布时间】:2015-12-10 22:12:51 【问题描述】:

我很想知道是否有其他人尝试过这个...我正要试一试,但希望其他人在我晚上 11:00 坐在这里之前可以分享一些经验(有早上去上班)试试这个。

如果我加载几个线程,并从每个线程创建一个事件库并在同一个 fd 上创建监听事件,libevent 将如何响应呢?是否只有一个事件库最终会赢得并触发事件,还是每个事件库最终都会触发事件?

【问题讨论】:

我想您的目标是通过使用线程来利用其他 CPU 内核...在这种情况下,您可以做的是让一个线程接收所有传入事件,然后将它们放到一个缓冲区,然后有一个线程池,每个线程池将事件从缓冲区中取出并处理它们。因此,如果您有一个 4 核 CPU,您将拥有一个接收事件的线程和一个由三个工作线程组成的池。我已经这样做了,它有效。 【参考方案1】:

好吧,我继续并很快将其编码。不幸的是,正如我所怀疑的那样,每个事件库都会触发一个事件。因此,使用四个线程,每个线程都有自己独特的事件库和同一 fd 上的一组事件,它触发了该函数四次。

【讨论】:

以上是关于同一 fd 上不同线程中的多个 libevent 基础的主要内容,如果未能解决你的问题,请参考以下文章

libevent 中的用户触发事件

如何让一个类的多个实例(在不同的线程中)监听同一个事件?

多个线程同时在同一向量的不同向量上添加元素发生错误

是否可以从多个线程写入同一文件的不同部分?

线程、事件循环和大量连接和并发

libevent到底是同步还是异步,是阻塞还是非阻塞