Обмен технологиями

Понимание пула потоков и 7 параметров

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Определить понимание

Пул потоков на самом деле является реализацией технологии пула. Основная идея технологии пула состоит в том, чтобы реализовать повторное использование ресурсов и избежать снижения производительности, вызванного повторным созданием и уничтожением ресурсов. Пул потоков может управлять группой потоков, чтобы потоки не уничтожались после выполнения задачи, а продолжали обрабатывать задачи, отправленные другими потоками.

Преимущества использования пула потоков

  • Уменьшите потребление ресурсов. Сократите затраты на создание и уничтожение потоков за счет повторного использования созданных потоков.
  • Улучшите скорость ответа. При поступлении задачи ее можно выполнить немедленно, не дожидаясь создания потока.
  • Улучшение управления потоками. Потоки — это дефицитные ресурсы. Если они создаются без ограничений, они не только будут потреблять системные ресурсы, но и снижать стабильность системы. Пул потоков можно использовать для унифицированного распределения, настройки и мониторинга.

Параметры конструкции

Вставьте сюда описание изображения

  • corePoolSize: используется для работы в пуле потоковКоличество основных потоков
  • максимальныйРазмерПула:Максимальное количество потоков , максимальное количество потоков, которое может быть создано пулом потоков. Когда количество потоков в пуле потоков достигнет corePoolSize, если очередь задач заполнена и необходимо обработать новые задачи, пул потоков создаст новые потоки (но общее количество не превышает MaximumPoolSize) для обработки этих задач. (Это эквивалентно тому, что когда область очереди заполнена, последующие потоки могут напрямую переходить в очередь.) Если количество задач превышает MaximumPoolSize и очередь задач заполнена, пул потоков будет обрабатывать эти неисполняемые задачи в соответствии с политикой отклонения.
  • KeepAliveTime: время выживания потоков, созданных после превышения corePoolSize или всех потоков.Максимальное время выживания, в зависимости от конфигурации.
  • единица измерения: keepAliveTimeединица времени
  • workQueue:очередь задач , представляет собой блокирующую очередь. Когда количество потоков достигает количества основных потоков, задача будет сохранена в блокирующей очереди. Распространенные реализации: классы реализации интерфейса BlockingQueue, такие как ArrayBlockingQueue, LinkedBlockingQueue и т. д.
  • threadFactory: используется для создания потоков внутри пула потоков.фабрика
  • обработчик:Запретить политику;Когда очередь заполнится и количество потоков достигнет максимального количества потоков, будет вызван этот метод для обработки задачи.

Как установить параметры

1. Определить количество основных потоков (corePoolSize)

  • Задачи с интенсивным использованием ЦП. Для задач с интенсивным использованием ЦП обычно устанавливается количество потоков ядра, в 1–2 раза превышающее количество ядер ЦП. Это обеспечивает полное использование ресурсов ЦП, избегая при этом чрезмерных переключений контекста.
  • Задачи с интенсивным вводом-выводом: для задач с интенсивным вводом-выводом, поскольку потоки не занимают ЦП при ожидании операций ввода-вывода, можно установить больше основных потоков. Вообще говоря, количество основных потоков может быть установлено более чем в 2 раза больше количества ядер ЦП, чтобы можно было обрабатывать больше задач во время ожидания ввода-вывода.
  • Смешанные задачи. Если ваше приложение содержит задачи как с интенсивным использованием ЦП, так и с интенсивным вводом-выводом, вам необходимо сбалансировать настройки количества основных потоков в зависимости от конкретной ситуации.

2. Определить максимальное количество потоков (maximumPoolSize).

  • Среды с ограниченными ресурсами. В средах с ограниченными ресурсами (например, встроенные системы или облачные серверы) максимальное количество потоков необходимо ограничить, чтобы предотвратить занятие ресурсов слишком большим количеством потоков.
  • Система с высоким параллелизмом. Для систем, которым необходимо обрабатывать большое количество одновременных запросов, максимальное количество потоков может быть соответствующим образом увеличено, чтобы улучшить возможности одновременной обработки системы. Однако настройку максимального количества потоков следует рассматривать комплексно, исходя из нагрузочной способности и ресурсного состояния системы.

3. Установите время простоя потока (keepAliveTime).

  • Приложения с интенсивным использованием ЦП. Для приложений с интенсивным использованием ЦП обычно можно установить более короткое значение времени простоя потока, поскольку ресурсы ЦП очень ценны, и вы не хотите, чтобы слишком много простаивающих потоков занимали ресурсы. В некоторых случаях его можно даже установить в 0, что указывает на то, что неосновные потоки не сохраняются.
  • Приложения с интенсивным вводом-выводом: для приложений с интенсивным вводом-выводом, поскольку потоки не занимают ресурсы ЦП при ожидании операций ввода-вывода, время простоя потока может быть установлено на более длительное значение (например, более 1 минуты), чтобы избежать частого запуска и уничтожения потока. . вызванные накладные расходы на производительность.

4. Выберите очередь задач (workQueue).

  • ограниченная очередь : использование ограниченной очереди может ограничить время ожидания задач в очереди и избежать переполнения памяти из-за слишком большого количества задач. Однако если длина очереди слишком мала, задачи могут быть отклонены. (Обычно выбирайте ограниченную очередь
  • Неограниченная очередь. Использование неограниченной очереди позволяет максимально кэшировать все задачи, но необходимо обращать внимание на проблемы с потреблением памяти. Если используется неограниченная очередь, параметр максимального количества потоков пула потоков может стать недопустимым, поскольку пул потоков не пытается создавать новые потоки для обработки задач в очереди.

5. Настройте фабрику потоков (threadFactory).

Фабрика потоков используется для создания новых потоков. Настраивая фабрику потоков, вы можете установить такие атрибуты, как приоритет потока и состояние потока демона, а также задать осмысленные имена для потоков, чтобы облегчить диагностику проблем в JVM.

6. Настройте политику отклонения (обработчик)

Когда пул потоков не может обрабатывать новые задачи (то есть количество потоков достигло максимального размера пула и очередь задач заполнена), необходимо настроить политику отклонения для обработки этих невыполнимых задач.Общие стратегии отказа включают в себяВызов исключения напрямуюИспользуйте поток вызывающего абонента для выполнения задачиИгнорировать новые задачи и удалять самые старые задачи в очереди. ждать. Вы также можете настроить политику отклонения по мере необходимости.