У меня есть служба, которая очень быстро опрашивает очередь, чтобы проверить, не нужно ли выполнить больше «работы». В очереди всегда больше работы, чем может выдержать один работник. Я хочу убедиться, что один работник не захватывает слишком много работы, когда служба уже работает на максимальной мощности.
Допустим, мой работник получает 10 сообщений из очереди каждые N (мс) и использует параллельную библиотеку для параллельной обработки каждого сообщения в разных потоках. Сама работа очень тяжелая. Многие запросы SQL Server и даже хранилище таблиц Azure (запросы http) выполняются за одну единицу работы.
Является ли использование TheadPool.GetAvailableThreads () правильным способом регулирования количества работы, которую может получить служба?
Я вижу, что у меня есть доступ к доступным WorkerThreads и CompletionPortThreads . Для тяжелого процесса ввода-вывода более уместно посмотреть, сколько доступно CompletionPortThreads? Я считаю, что 1000 - это число, доступное для процесса независимо от количества процессоров.
Обновление - Возможно, важно знать, что очередь, с которой я работаю, является очередью Azure. Таким образом, каждый запрос на проверку сообщений выполняется как асинхронный http-запрос, который возвращается со следующими 10 сообщениями. (и стоит денег)