Подтвердить что ты не робот

Высокоэффективная реализация CircularBuffer (как поточно-безопасная, так и не потокобезопасная)

Может ли кто-нибудь предложить хорошую реализацию CircularBuffer? Мне нужны как "небезопасные", так и "потокобезопасные" версии. Я ожидаю следующих операций:

  • возможность предоставления размера буфера при создании
  • добавление элементов
  • итерирующие элементы
  • удаление элементов при итерации
  • возможно удаление элементов

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

Я ожидаю, что реализация "не потокобезопасная" будет чрезвычайно быстрой. Я ожидаю, что "потокобезопасная" реализация будет быстрой, возможно, используя "незакрепленный код" для синхронизации, и это нормально иметь некоторые ограничения, если это необходимо для скорости.

Если буфер слишком мал, чтобы хранить новый (добавленный) элемент, он имеет смысл переустановить существующий элемент или исключить исключение.

Должен ли я использовать disruptor.net?

Добавление ссылки на хороший пример Пример Disruptor.NET

4b9b3361

Ответ 1

Небезопасный поток:

System.Collections.Generic.Queue

Защита потолка:

System.Collections.Concurrent.ConcurrentQueue

или

System.Collections.Concurrent.BlockingCollection (который по умолчанию использует параллельную очередь по умолчанию)

Хотя технически вы действительно не должны использовать термин "потокобезопасный" . Это просто слишком неоднозначно. Первый не предназначен для одновременного использования несколькими потоками, остальные -.