Производительность ConcurrentQueue vs Queue + lock

Мне нужно реализовать стандартный алгоритм одного потребителя. Я могу реализовать его с помощью Queue и нескольких инструкций lock. Или я могу просто использовать ConcurrentQueue. Что лучше?

Если используется Queue + lock, то я могу оптимизировать "множественное добавление/возврат", потому что я могу lock один раз, а затем Add много раз.

Что в общем случае быстрее - ConcurrentQueue или Queue + lock и насколько разница? Конечно, ConcurrentQueue является самым прямым, но я не хочу потерять много производительности, поскольку я использую это в торговом приложении HFT.

Ответ 1

Из С# в двух словах:

Выполняются параллельные классы стека, очереди и пакета внутренне со связанными списками. Это делает их менее эффективными с точки зрения памяти чем неконкурентные классы Stack и Queue, но лучше для параллельный доступ, потому что связанные списки являются проводящими для блокировки или с низкой блокировкой.

Другими словами, трудно определить общий случай, не говоря уже о том, чтобы предсказать, какая разница в производительности.

Это зависит от размера коллекции и использования. Ожидается, что производительность будет лучше, если будет достаточно одновременного доступа, потребление памяти будет хуже.