Существуют ли в.NET кольцевые буферы, которые могут иметь несколько потребителей?

Хотите знать, если в.NET существует кольцевой буфер, в котором есть только один модуль записи, но он может иметь несколько потребителей?

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

3 ответа

Решение

Посмотрите на эту статью, это действительно неплохо http://www.albahari.com/threading/part5.aspx Я бы посоветовал вам захотеть BlockingCollection<T>

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

Для хорошего учебника и т. Д. См. http://geekswithblogs.net/BlackRabbitCoder/archive/2011/02/10/c.net-little-wonders-the-concurrent-collections-1-of-3.aspx

Всякий раз, когда буферизация + многопоточность в.NET вы хотите Rx. Увидеть new ReplayBuffer<T>(int), http://msdn.microsoft.com/en-us/library/hh229429.aspx

Последнее, что я слышал, в Disruptor.NET есть много сложных деталей, которые нужно понять, прежде чем вы получите какие-либо преимущества в производительности. Я бы предложил сначала выполнить моделирование в Rx и перейти к Disruptor, когда у вас есть небольшие (<10k) наборы данных, работающие в Rx, а затем сосредоточиться на производительности.

Другие вопросы по тегам