Я создал свой пул потоков, как это:поведения ThreadPool: не растет от минимального размера
ThreadPool.SetMaxThreads(10000, 10000);
ThreadPool.SetMinThreads(20, 20);
Однако, мое приложение начало висеть под большой нагрузкой. Это было связано с тем, что рабочие задачи не выполнялись: я использовал ThreadPool.QueueUserWorkItem
для запуска некоторых задач, которые, в свою очередь, использовали один и тот же метод для дальнейшей работы в очереди. Это, очевидно, опасно с ограниченным пулом потоков (ситуация с блокировкой), но я использую пул потоков, чтобы не ограничивать максимальные потоки, но уменьшать накладные расходы на потоки.
Я вижу потенциальную ловушку там, но я полагал, что установка максимального количества 10000 потоков в пуле означает, что если элемент был поставлен в очередь, все потоки были заняты, и в пуле не было 10000 потоков, будет создан новый, и там будет обработано задание.
Однако, я изменил к этому:
ThreadPool.SetMaxThreads(10000, 10000);
ThreadPool.SetMinThreads(200, 200);
..и приложение начал работать. Если это заставило его начать работать, мне не хватает чего-то о том, как/когда пул потоков расширяется от минимального до максимального размера?
Спасибо, но знаете ли вы ответ на мой вопрос? Я доволен своим дизайном приложений; Я мог легко подключить 20 клиентов, каждый из которых учитывает 10-20 одновременных задач, которые используются в течение короткого периода времени. –