From 29736c4fed154233a8adbf93b29995c8e0b3ea78 Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Mon, 20 Apr 2026 21:22:01 +0200 Subject: Use eastl::deque for queues with many small elements (#991) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switch several deque-based queues from `std::deque` to `eastl::deque` to reduce per-element heap allocation overhead. MSVC's `std::deque` allocates one node per element for anything larger than ~16 bytes; `eastl::deque` groups 4, 8, or 32 elements per block depending on element size. Converted call sites: - `BlockingQueue` and `WorkerThreadPool` (generic — downstream callers benefit automatically) - Session log entry buffer (~10k-entry ring of large log records — 4 per block vs 1) - Job queue (`Ref` — 32 per block vs 2) - RPC recording request queue (large `QueuedRequest` struct — 4 per block vs 1) - StatsD client message queues (~32-byte buffers — 8 per block vs 1) --- src/zencore/workthreadpool.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/zencore/workthreadpool.cpp') diff --git a/src/zencore/workthreadpool.cpp b/src/zencore/workthreadpool.cpp index 1cb338c66..fb7edb2bd 100644 --- a/src/zencore/workthreadpool.cpp +++ b/src/zencore/workthreadpool.cpp @@ -4,6 +4,10 @@ #include #include + +ZEN_THIRD_PARTY_INCLUDES_START +#include +ZEN_THIRD_PARTY_INCLUDES_END #include #include #include @@ -56,8 +60,8 @@ struct WorkerThreadPool::Impl std::atomic m_WorkerThreadCounter{0}; std::atomic m_FreeWorkerCount{0}; - mutable RwLock m_QueueLock; - std::deque> m_WorkQueue; + mutable RwLock m_QueueLock; + eastl::deque> m_WorkQueue; Impl(int InThreadCount, std::string_view WorkerThreadBaseName) : m_ThreadCount(InThreadCount) -- cgit v1.2.3