max0x7ba / atomic_queue

C++ lockless queue.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CPU load at 100%

visstup opened this issue · comments

Hi,

I'm writing a high-performance consumer of real-time messages and need a thread-safe, fast queue.
I've implemented the AtomicQueueB in my application and noticed that one or more CPUs are always at 100% load during runtime.
When running the example.cc with
unsigned constexpr N = std::numeric_limits<unsigned>::max() - 10; // Pass this many elements from producers to consumers.
I noticed similar behaviour.

Is this normal? If no, any ideas on how to set up the queue so it doesn't exhibit the load?
I didn't disable real-time thread throttling.

Also, if the tasks are pinned to a specific core, is it possible to disable this? My application needs to run in the cloud (only virtual cores available there...)

Compiled with g++ 9.3.1 with C++14

The queues here are non-blocking, that's why you observe 100% CPU usage.

You sound surprised. I suggest you read the README and about thread-safe queues in general.

commented

The spin lock is designed from a latency perspective (for HFT). For other use-cases this is not desirable for obvious reasons.
I'd suggest changing the spin_loop_pause @visstup or even using a different queue (as this one is entirely designed for latency and may not be the best for other situations).