На машине выполняется несколько заданий. Для каждой работы я должен звонить во внешнюю службу (плюс выполнять другую работу). Количество вызовов внешней службы для задания заранее неизвестно, или даже когда задание начинается, поскольку обработка задания включает потоковую передачу входных данных.
Перед запуском задания , Мне нужно создать определенное количество потоков для обработки - как часть обработки он вызывает внешнюю службу.
Скажем, служба поддерживает только 100 TPS (транзакций в секунду) и максимум 10 задания могут выполняться на машине, и я не хочу бомбардировать службу.
Проблема состоит в том, чтобы определить количество рабочих потоков, выделяемых для каждого задания . Поскольку в худшем случае одновременно могло выполняться 10 заданий, я мог выделить 10 потоков для каждого задания. Но если бы выполнялось только одно задание с 10 потоками, я бы недостаточно использовал службу.
Думаю, я мог бы использовать PoolingHttpClientConnectionManager для объединения потоков и использования их для доступа к службе. Я мог бы использовать DefaultMaxPerRoute
и MaxTotal
как 100.
Преимущество: Когда выполняется только одно задание, я могу полностью использовать внешнюю службу.
Проблема в том, что когда выполняется 10 заданий, 1000 потоков будут конкурировать за вызов службы. Подойдет ли создание 100 потоков на задание по умолчанию, или конфликт ресурсов приведет к проблемам?
ОБНОВЛЕНИЕ:
Узнал, что клиент, который я буду использовать, не должен иметь таймаут запроса на соединение для проверки / аренды соединения из пула, иначе он выдаст ConnectionPoolTimeoutException
.