C++ 如何在libevent中共享回调
我使用libevent创建的大多数应用程序都涉及一个读取回调,每当为请求打开新连接时,我都会使用C++ 如何在libevent中共享回调,c++,sockets,libevent,C++,Sockets,Libevent,我使用libevent创建的大多数应用程序都涉及一个读取回调,每当为请求打开新连接时,我都会使用::event_new()分配一个新事件,然后通过::event_add()将该事件添加到事件库中 但问题是,每次打开一个新请求时,我都会分配内存并将其添加到事件循环中,而实际上我应该为文件描述符共享回调和事件。假定内存分配不是此类应用程序的瓶颈,libevent是否提供了与多个文件描述符共享事件的方法?您不应该在文件描述符之间共享事件。这会在你的应用程序中造成混乱event\u new()创建附加到
::event_new()
分配一个新事件,然后通过::event_add()
将该事件添加到事件库中
但问题是,每次打开一个新请求时,我都会分配内存并将其添加到事件循环中,而实际上我应该为文件描述符共享回调和事件。假定内存分配不是此类应用程序的瓶颈,libevent是否提供了与多个文件描述符共享事件的方法?您不应该在文件描述符之间共享事件。这会在你的应用程序中造成混乱
event\u new()
创建附加到文件描述符的事件
您可以尝试使用
event\u assign()
重新分配已用事件,但libevent文档明确指出,不建议这样做。另外,在某种类型的池中管理已用事件可能不像看上去那么简单,而且可能不会有任何明显的性能提升。在您的问题中,为文件描述符共享回调和事件是什么意思?内存分配对于存储连接状态以进行处理是不可避免的。事件的状态与任何其他事件完全不同。您如何共享这些功能以实现不同的功能?还有,文件描述符
在未使用(关闭)时会被操作系统重新用于选择
、轮询
、epoll
,等等。你能详细说明一下你到底想做什么吗?@Azeem我问,因为我所有的读取事件都是相同的,除了等待的文件描述符之外。你能给出一个代码示例吗?请用一些支持代码的例子来编辑你的问题。你能举例说明你所说的混乱是什么意思吗?除了给定的文件描述符之外,我创建的所有读取事件都是相同的。我只是想了解snd模式的正确用法,这里事件绑定到套接字,并在该套接字上触发事件。将事件附加到多个活动套接字将导致未定义的行为。这意味着你的程序要么马上爆炸,要么以一种未定义的方式运行——这意味着从那时起任何类型的错误都可能发生,比如在错误的套接字上触发的事件、死套接字、内存泄漏、无法跟踪的内存损坏等等。