Лучший пример очереди / наилучшая практика в цепочке

У меня есть данные, которые нужно выполнить на определенном фоновом streamе. У меня есть код, исходящий из всех других streamов, которые нужно вызвать в этом. кто-нибудь имеет хороший учебник или передовой опыт в отношении очереди для синхронизации для поддержки этого требования к streamу

Вы можете:

  • внедрить модель производителя / потребителя (которая не использует поточную генераторную очередь )
  • или использовать в фоновом streamе синхронизированную очередь , которая комментирует процесс Перечисления через коллекцию.

Проверьте Threading in C # , Joseph Albahari, очень полную ссылку на multithreading. В частности, он охватывает очереди производителей / потребителей .

Это интересная статья о ThreadPools:

http://www.codeproject.com/KB/threads/smartthreadpool.aspx

Для более простых применений вы также можете использовать собственный class ThreadPool .Net.

Одно из моих любимых решений этой проблемы похоже на модель producer/consumer .

Я создаю главный stream (в основном, Main() My) моей программы, который содержит объект очереди блокировки.

Этот главный stream объединяет несколько рабочих streamов, которые простукивают от центральной блокирующей нити и обрабатывают их. Поскольку это streamовая блокировка очереди, биты синхронизации просты – TaskQueue.Dequeue() блокируется до тех пор, пока задача не будет выставлена ​​в очередь производителем / основным streamом.

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

В моем случае у меня есть служба, которая обрабатывает несколько разных типов tasks . У меня есть очередь, набранная для обработки чего-то общего, такого как TaskQueueTask . Затем я подclassифицирую это и переопределяю метод Execute() .


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

Вы можете попробовать это решение. Он показывает, как реализовать шаблон производителя-потребителя. Имеет также некоторое объяснение того, что с ним можно сделать. Как и разные комбинации числа производителей и потребителей.

http://devpinoy.org/blogs/jakelite/archive/2009/01/12/threading-patterns-the-producer-consumer-pattern.aspx

http://devpinoy.org/blogs/jakelite/archive/2009/02/03/threading-patterns-producer-consumer-pattern-examples.aspx