Я новичок в программировании, в моей компании у нас есть система бронирования. Для нашего ПО я получаю XML-запрос к нашему сервису. когда мы получаем запрос на наш сервис. мы создаем поток и обрабатываем его. Это программное обеспечение отлично работает. Но в последнее время у нас появилась новая проблема. Один из наших клиентов отправляет свою информацию о бронировании (например, 10000 XML) в час X (например, 1: AM) каждый день. Программное обеспечение ведет себя, мы создаем 10000 потоков. Затем мы получаем OutOfMemorryError. Чтобы улучшить это, мы собираемся реализовать с Executors. Мой вопрос: мы используем лучший способ обработки 10000 запросов?
Любые предложения будут оценены.Как обрабатывать n запросов в многопоточности
1
A
ответ
2
Создание Executor
, который имеет максимальное количество потоков, например .:
ThreadPoolExecutor executor
= new ThreadPoolExecutor(50, 50, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
executor.allowCoreThreadTimeOut(true);
первых 50 corePoolSize
, второй 50 maximumPoolSize
. Разница в том, что больше чем corePoolSize
потоков будет создано только в том случае, если очередь заполнена.
Мы не хотим иметь 50 простоя, поэтому мы даем им время ожидания (allowCoreThreadTimeOut(true)
) через 60 секунд.
Возможно, вы также захотите установить максимальную емкость в очереди. Если все потоки заняты, а очередь заполнена, исключение будет выбрано (а не OutOfMemoryError
при попытке добавить слишком много в очередь).
Затем вы просто вызываете executor.submit(...)
и даете ему Runnable
или Callable
в качестве параметра.
Смежные вопросы
- 1. Как обрабатывать отношения N-N в EF?
- 2. Как обрабатывать несколько запросов в PHP?
- 3. Как обрабатывать причал несколько запросов
- 4. Как обрабатывать набор запросов django?
- 5. Как обрабатывать несколько запросов ajax?
- 6. Как обрабатывать большие MySQL запросов
- 7. Как обрабатывать файлы в каталоге с использованием многопоточности C#
- 8. как обрабатывать пустую LINQ Запросов
- 9. Как обрабатывать отношения N-N в Entity Framework .NET 3.5
- 10. Как обрабатывать n элементов в коллекции одновременно
- 11. .NET решение многопоточности для длинных запросов
- 12. Как обрабатывать конкретизации поисковых запросов в SOLR
- 13. Как обрабатывать несколько запросов conncurrency в node.js
- 14. Как обрабатывать большое количество запросов в scrapy?
- 15. Как обрабатывать високосный год в SQL запросов
- 16. Как обрабатывать несколько параллельных запросов в NodeJs
- 17. Как мне обрабатывать синхронизацию запросов в PHP?
- 18. Как избежать N + 1 запросов в Rails
- 19. Как обрабатывать большую очередь (tempfiles?) С помощью многопоточности
- 20. Отслеживание запросов «N» в Solr
- 21. Как обрабатывать обработчики запросов как зависимость?
- 22. Как обрабатывать отношение 1: n в формах smyfony2?
- 23. Как raw_input обрабатывать ENTER или \ n
- 24. cURL: обрабатывать несколько асинхронных запросов
- 25. Обрабатывать несколько запросов Ajax: ClearTimeout
- 26. Flux: как обрабатывать несколько запросов async
- 27. Как обрабатывать несколько веб-запросов по одному?
- 28. C# Как обрабатывать несколько веб-запросов сразу
- 29. Как обрабатывать нулевые значения из запросов ColdFusion?
- 30. Как обрабатывать несколько запросов ограниченного количества элементов?
Возможно, вы должны спросить одного из своих старших разработчиков .... – redFIVE
Я бы предложил использовать java.nio, где вы можете использовать набор потоков для обслуживания большого количества подключений. Также можно посмотреть netty, который представляет собой реализацию nio с использованием модели конвейерной обработки. – DBug
@redFIVE Согласен. Однако, если бы они знали решение, такая архитектура никогда не была бы создана в первую очередь. И это немного беспокоит, что ни один из старших разработчиков не знает о пулах потоков ... –