LoongCollector的无锁事件池架构解决了传统采集器为每条日志频繁创建和销毁PipelineEvent对象导致的CPU开销(约占总处理时间10%)和内存碎片问题。其设计采用线程感知的事件池策略:
同线程场景(Lock-free Pool):每个处理线程维护自己的线程级无锁对象池,同一线程内的分配和释放直接从本地池操作,完全避免锁竞争。
跨线程场景(Double Buffer Pool):
- Input Runner维护自己的事件池用于分配对象
- Processor Runner维护自己的事件池用于释放对象,支持按PipelineEventGroup批量归还
- 仅在Input池耗尽时才触发跨线程的批量转移操作
- 批量释放机制将跨线程访问频率降低90%
效果方面,对象创建从事件级频率降为池化复用,减少约90%;内存碎片降低约80%。这种设计既避免了全局锁的竞争问题,又解决了纯thread-local池无法覆盖跨线程交付的局限。