Как я понял, ваше требование - запустить как можно больше потоков, чтобы оптимизировать использование процессора.И в то же время вы хотите, чтобы фреймворк позаботился об этой обязанности по увеличению и уменьшению текущих запущенных потоков в соответствии с загрузкой ЦП.
Я бы сказал, что TPL (Задачи) будет лучшим вариантом.Пожалуйста, изучите http://msdn.microsoft.com/en-us/library/dd537609.aspx
Мы можем помочь вам больше, если вы расскажете о характере своей работы, которую вы хотите выполнять параллельно.Что именно вы подразумеваете под работающими в режиме 24X7?Какую работу выполняют ваши задачи?Это вычисления или IO (работа с БД / вызов веб-службы)?
Я предполагаю, что каждый запрос состоит из 4 шагов, и эти шаги выполняются в следующей последовательности: 1. Просмотр БД 2. Вызов веб-службы3. Обновление БД 4. Записать в файл
Как вы упомянули, вызов веб-службы требует времени и, следовательно, лучше всего подходит для задачи асинхронного ввода-вывода.
Далее вы сказали,
Процессором, интенсивно использующим процессор, будет поиск в БД
Но я понимаю, что поиск в БД не использует ЦП и является операцией ввода-вывода и, опять же, хорошим кандидатом для задачи асинхронного ввода-вывода.
Учитывая все эти предположения, я предлагаю следующее:
- Просмотр БД (выполняется асинхронно, чтобы поток пула потоков был освобожден для обработки других запросов)
- Веб-службавызов (выполняется асинхронно, так что поток пула потоков будет освобожден для обработки других запросов)
- Обновление БД (выполняется синхронно)
- Журнал в файл (используйте асинхронное ведение журнала в зависимости от содержимого журнала size)
Насколько я понимаю, ни один из ваших шагов не требует интенсивной работы ЦП, поэтому вы видите только 5% использования ЦП.
Вы также упомянули, что
сопровождается случайной задержкой для равномерного распределения нагрузки.
Вы хотели выполнить как можно больше таких запросов?(состоит из этих 4 шагов)?Если так, то вам не нужно ставить какие-либо дополнительные вещи.Потому что, когда запрос ожидает асинхронного вызова, он освобождает поток пула потоков, и система может использовать его для обработки другого запроса.Это увеличит пропускную способность.
Должен ли я сохранять Задачу в каждом классе или я должен наследовать своего Бота от Задачи?
1 Бот представляет собой 1 запрос.Задачи представляют собой шаги в запросе.Поэтому создайте задачи в своем классе BOT.
Запустите его с различным количеством запросов и проверьте использование ресурсов процессора, памяти и других системных ресурсов.