У нас есть несколько длинных бизнес-процессов, которые запускаются через службы WCF, работающие в IIS (интегрированном режиме) на WS 2008 R2. Эти бизнес-процессы обычно связаны с большим количеством взаимодействия с нашим сервером SQL Server. Мы создали обычную реализацию очереди задач, посредством которой запросы ставятся в очередь через начальный вызов службы и затем выполняются на основе приоритета. Это выполнение может занять много времени (максимум 20-30 минут). Затем клиенты могут запрашивать сервер для выполнения своих собственных фоновых задач.ThreadPools vs Own Threads для длительных процессов
В нашей текущей реализации задачи запускаются в отдельный поток для выполнения, а не из ThreadPool. Это было сделано из-за reading recommendations из-за отсутствия длительных задач с использованием ThreadPool, чтобы предотвратить голодание запросов ASP.NET. Мы контролируем количество потоков, порожденных, устанавливая верхний предел количества фоновых задач, которые могут выполняться одновременно. Таким образом мы пытаемся контролировать нагрузку на CPU и предотвращать слишком много переключений контекста потока. Хотя все это происходит, мы, конечно, все равно должны обслуживать обычные «он-лайн» запросы для приложения.
После прочтения this post Thomas Marquardt Меня беспокоит тот факт, что мы не используем ThreadPool, поскольку мы не получим преимущества эвристики настройки, встроенной в нее. Мы уже решаем проблему завершения работы, которую Томас упоминает, подключаясь к событию ApplicationEnd и отменяя длительные задачи. Итак, мой вопрос: переходим ли мы к использованию ThreadPool? Как насчет того, чтобы эти потоки были связаны в течение длительных периодов времени? Если я правильно понимаю Томаса, он говорит, что это не имеет значения, поскольку ThreadPool настроится на создание большего количества запросов для обслуживания обычных онлайновых операций? Я также прочитал this StackOverflow question, который охватывает те же самые основания, но я до сих пор не уверен в дальнейших действиях.
Просьба уточнить: какая конкретная настройка, по вашему мнению, может отсутствовать? –
Возможно, «мелодия» была неправильным словом для использования, но я имел в виду, что если фоновые задачи выполнялись с использованием потоков ThreadPool, ThreadPool «был бы awar» e дополнительной «нагрузки», помещаемой в систему фоновыми задачами. Если мы запускаем их с использованием обычных потоков, ThreadPool не знает этого. Опять же, у меня нет внутренних деталей того, как эвристика ThreadPool работает точно, но чтение через пост Томаса вызвало озабоченность с моей стороны тем, что мы перешагиваем эту «настраивающую» логику, встроенную в ThreadPool, -ThreadPool темы – Carel