我打算编写一个C++网络应用程序,具体如下:
- 使用单个线程接受TCP连接并从中读取数据。我打算使用epoll/select来实现。数据被写入使用某个内存池分配的缓冲区,例如jemalloc。
- 当有足够的数据来自单个TCP客户端以形成协议消息时,将在环形缓冲区中发布该数据。环形缓冲区结构包含连接的fd和指向包含相关数据的缓冲区的指针。
- 工作线程从环形缓冲区处理条目,并向客户端发送一些结果数据。在处理每个事件后,工作线程释放实际数据缓冲区以将其返回给内存池分配器进行重新使用。
我略去了发布者如何使其写入的数据对工作线程可见的细节。
所以我的问题是:有没有专门优化这种行为(即在线程之间分配和释放对象)的内存池?
我担心不得不使用锁来返回内存到未与线程亲和力内存池的情况。我也担心因为生产线程和工作线程都将写入同一区域而导致伪共享问题。似乎jemalloc或tcmalloc都不能为此进行优化。