Высокоэффективная реализация CircularBuffer (как поточно-безопасная, так и не потокобезопасная)
Может ли кто-нибудь предложить хорошую реализацию CircularBuffer? Мне нужны как "небезопасные", так и "потокобезопасные" версии. Я ожидаю следующих операций:
- возможность предоставления размера буфера при создании
- добавление элементов
- итерирующие элементы
- удаление элементов при итерации
- возможно удаление элементов
Я ожидаю, что реализация будет сильно оптимизирована с точки зрения скорости и используемой памяти, среднего и худшего времени и т.д.
Я ожидаю, что реализация "не потокобезопасная" будет чрезвычайно быстрой. Я ожидаю, что "потокобезопасная" реализация будет быстрой, возможно, используя "незакрепленный код" для синхронизации, и это нормально иметь некоторые ограничения, если это необходимо для скорости.
Если буфер слишком мал, чтобы хранить новый (добавленный) элемент, он имеет смысл переустановить существующий элемент или исключить исключение.
Должен ли я использовать disruptor.net?
Добавление ссылки на хороший пример Пример Disruptor.NET
Ответы
Ответ 1
Небезопасный поток:
System.Collections.Generic.Queue
Защита потолка:
System.Collections.Concurrent.ConcurrentQueue
или
System.Collections.Concurrent.BlockingCollection (который по умолчанию использует параллельную очередь по умолчанию)
Хотя технически вы действительно не должны использовать термин "потокобезопасный" . Это просто слишком неоднозначно. Первый не предназначен для одновременного использования несколькими потоками, остальные -.