У нас есть Служба Windows , на которой размещено несколько служб WCF , и в несвязанной части приложения широко используется TPL Task
класс для асинхронного выполнения относительно коротких битов работы.
Насколько я понимаю, WCF использует потоки управляемого ввода-вывода из ThreadPool для выполнения запросов.Я заметил, что после развертывания функции, которая значительно повысила использование приложений Tasks
, а также использование рабочих потоков ThreadPool, производительность пары веб-сервисов стала очень низкой.Мы говорим минуты вместо секунды.Число Tasks
, которые фактически пытаются выполнить в любой момент времени, может варьироваться от 20 до 1000, что заставляет меня думать, что любая новая (последняя) работа, требующая некоторого времени ЦП, может быть вынуждена ждать довольно долго.
Влияет ли (в моем случае очень большое) количество занятых рабочих потоков ThreadPool на потоки управляемого ввода-вывода ThreadPool?Могут ли эти двое быть связаны каким-либо образом?Или я должен начать искать в другом месте ...
Спасибо!
РЕДАКТИРОВАТЬ: Я только что проверил выборочное развертывание приложения в режиме реального времени, пытаясь вызвать один издлительно работающие веб-службы, что довольно типично: выполняется 70 задач, процесс службы Windows имеет около 150 потоков, средняя загрузка ЦП составляет 30-60%.Под типичным я подразумеваю, что загрузка процессора обычно составляет около 40% и редко превышает 80%, однако при этом выполняется большое количество задач и потоков, используемых процессом.