Облегченные библиотеки пула потоков в .NET - PullRequest
6 голосов
/ 18 февраля 2009

Я ищу библиотеку пула потоков в .NET

  • Я должен иметь возможность выполнить около 100 000 задач, поэтому должен обеспечить поддержку для «блокирования». ( очевидно, что я не могу выдвинуть столько задач одновременно, поэтому должен поддерживать некоторую блокировку при добавлении новых задач и должен блокировать поток, пока не освободится новый слот )
  • Не слишком сложно
  • Не так дорого (память - процессор)
  • Бесплатный / Открытый исходный код (коммерческая лицензия)

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

Это будет в основном использоваться для HTTP-запросов, поэтому меньше ЦП, больше ожидания ответа. Это означает, что одновременный поток 100 является приемлемым.

Ответы [ 9 ]

3 голосов
/ 18 февраля 2009

Лучшее, что я видел за последнее время, - это PowerThreading библиотека Джеффри Рихтера . Вы также можете проверить это видео 9 канала

Приятной особенностью библиотеки PowerThreading является то, что она эффективно использует ThreadPool, позволяя разделять один поток между многими запросами.

2 голосов
/ 18 февраля 2009

Проверьте Microsoft CCR . Он имеет очень эффективный пул потоков и имеет примитивы, упрощающие работу со многими выдающимися асинхронными запросами ввода-вывода.

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

2 голосов
/ 18 февраля 2009

Retlang камни! Или Rhino Queues от Ayende.

2 голосов
/ 18 февраля 2009

Почему бы просто не использовать .NET ThreadPool?

1 голос
/ 18 февраля 2009

.Net 4.0 добавляет параллельную библиотеку задач, которая будет иметь прямую поддержку для этого. Если вы не знаете об этом, он доступен как в виде отдельной CTP-версии на основе .Net 3.5, так и в качестве части CTP-версии Visual Studio 2010, выпущенной осенью прошлого года. Вот ссылка на командный блог , в котором есть дополнительная информация и указатель на скачивание.

1 голос
/ 18 февраля 2009

У меня была такая же необходимость, как и у вас, но мой вопрос был сформулирован по-другому, чтобы получить очень похожие ответы: Есть ли способ выполнить метод несколько раз, кроме управления соединениями / потоками? (.NET)

1 голос
/ 18 февраля 2009

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

Кроме того, если у вас есть SQL Server и вы хотите, чтобы резервное копирование и управление очередью было проще, рассмотрите SQL Server Service Broker .

0 голосов
/ 02 апреля 2009

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

Я придерживаюсь своей собственной реализации, которая в основном представляет собой реализацию очереди блокировки около Threading.Thread(), и она работает просто отлично.

0 голосов
/ 18 февраля 2009

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

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