Галерея диаграмм связей Java-параллелизм
Это интеллектуальная карта параллельного выполнения Java. Основное содержание включает в себя: блокировки, пулы потоков, параллельные контейнеры и базовые концепции.
Отредактировано в 2024-04-22 19:41:17Java-параллелизм
основная концепция
процесс
куча
область метода
Куча и область методов — это ресурсы, совместно используемые всеми потоками. Куча — это самая большая часть памяти в процессе, которая в основном используется для хранения вновь созданных объектов (здесь почти все объекты выделяют память). объекты. Информация о классе, константы, статические переменные, код, скомпилированный JIT-компилятором, и другие данные.
нить
счетчик команд
Стек виртуальных машин
собственный стек методов
В процессе может быть несколько потоков, и несколько потоков совместно используют ресурсы кучи и области методов (метапространства после JDK1.8) процесса, но каждый поток имеет свой собственный счетчик программ, стек виртуальной машины и локальный стек методов.
одновременно
параллельный
Может легко привести к утечкам памяти, взаимоблокировкам и небезопасности потоков.
Синхронизировать
асинхронный
Безопасность резьбы
Создать тему
Жизненный цикл и статус потока
НОВЫЙ
Готово (работает)
Бег
Заблокировано
Синхронная блокировка (Заблокировано)
Ожидание блокировки (WAITING)
Блокировка ожидания по тайм-ауту (TMME-WAITING)
Смерть (Мёртв/ПРЕКРАЩЕНО)
Переключение контекста потока
взаимоблокировка потока
Четыре необходимых условия тупика
Как предотвратить тупик
Как устранить неполадки
Графика: jconsole
jps -l узнает номер процесса программы, номер процесса jstack
ДММ
определение
фон
Согласованность ЦП и кэша
Оптимизация процессора
Параллельное изменение порядка инструкций
Перестановка оптимизации компилятора
Перестановка системы памяти
Теория параллелизма
как будто серийные правила
случается – прежде чем правило
правила последовательности программы
Мониторинг правил блокировки
Правила нестабильных переменных
правило транзитивности
правило start()
правила соединения()
Три основные характеристики
атомарность
видимость
упорядоченность
Как решить проблемы параллелизма
Три главных ключевых слова
изменчивый
видимость
происходит раньше принципа
принцип
записать семантику памяти
Чтение семантики памяти
упорядоченность
Реализация семантики памяти
синхронизированный
эффект
атомарность
упорядоченность
видимость
записать семантику памяти
Чтение семантики памяти
Применение
Украсить методы экземпляра
Изменить статические методы
Украсьте блоки кода
принцип
синхронизированный блок кода
метод синхронизации
объектная модель Java
Заголовок объекта
Марк Ворд
Класс Пойнт
Данные экземпляра
Выравнивание байтов
обновление замка
нет замка
Статус блокировки
блокировка смещения
Статус блокировки
Время обновления
Конкретные операции
выгода
Смещенный идентификатор потока несовместим с текущим идентификатором потока.
Успех конкурса
Конкурс провалился
Техническая реализация
легкий замок
Статус блокировки
Время обновления
эффект
Вращаться
Разница между блокировкой смещения и блокировкой смещения
Тяжелый замок
Статус блокировки
Время обновления
принцип
оптимизация jdk1.6
спин-блокировка
адаптивная блокировка вращения
устранение блокировки
шероховатость замка
блокировка смещения
легкий замок
финальный
эффект
Правила изменения порядка
Напишите правила переупорядочения для конечных полей.
Изменение порядка правил чтения конечных полей
барьер памяти
параллельный контейнер
Список
КопироватьонзаписьArrayList
Вектор
Набор
КопироватьОнWriteArraySet
карта
ConcurrentHashMap
ConcurrentSkipListMap
Хеш-таблица
очередь
МассивБлокированиеОчередь
LinkedBlockingQueue
ПриоритетБлокировкаОчередь
Синхронная очередь
Пул потоков
определение
Преимущество
Уменьшите потребление ресурсов
Улучшите скорость ответа
Улучшение управления потоками
Как создать
Исполнители
Пул фиксированных потоков
SingleThreadExecutor
Вероятно, используется неограниченная LinkedBlockingQueue. Максимальная длина очереди задач — Integer.MAX_VALUE. Может накапливаться большое количество запросов, что приводит к OOM.
CachedThreadPool
Используется очередь синхронизации SynchronousQueue, а количество потоков, которое разрешено создавать, равно Integer.MAX_VALUE.
Запланированный пул потоков
Используется неограниченная очередь отложенной блокировки DelayedWorkQueue. Максимальная длина очереди задач — Integer.MAX_VALUE, что может привести к накоплению большого количества запросов, что приведет к OOM.
ThreadPoolExecutor
Общие параметры
corePoolSize
Максимальный размер пула
работаОчередь
KeepAliveTime
единица
ThreadFactory
обработчик
Политика прерывания
CallerRunsPolicy
Политика сброса
Отбросить старую политику
Процесс решения задач
Как установить размер пула потоков
Теоретический алгоритм
эмпирический метод
Задачи с интенсивным использованием ЦП (N 1)
Задачи с интенсивным вводом-выводом (2N)
Будущий класс
Отменить задачу
Определить, была ли задача отменена
Определить, выполнена ли задача
Получить результаты выполнения задачи
недостаток
ЗавершаемоеБудущее
Решите недостатки будущего
преимущество
Стадия завершения
Замок
основная концепция
пессимистический замок
преимущество
Стоимость пессимистической блокировки фиксирована
недостаток
Жесткая конкуренция за блокировки может привести к блокировке потоков
Большое количество заблокированных потоков приведет к переключению контекста системы. Увеличение затрат на производительность системы
Пессимистическая блокировка также может вызвать проблемы взаимоблокировки.
Применимая сцена
Напишите несколько сценариев и жесткую конкуренцию (чтобы избежать частых сбоев и повторных попыток, влияющих на производительность)
оптимистическая блокировка
преимущество
Нет конкуренции за блокировки, вызывающей блокировку потоков.
Проблем тупиков не будет
недостаток
Если конфликты происходят часто (происходит много операций записи), будут часты сбои и повторные попытки.
Применимая сцена
Несколько сценариев чтения, меньше конкуренции (можно избежать частых блокировок, влияющих на производительность)
План реализации
Механизм номера версии
CAS-алгоритм
вопросы ABA
Длительное время цикла и высокие накладные расходы
Гарантируются только атомарные операции с общей переменной.
ThreadLocal
эффект
принцип
Хэш-алгоритм
Хэш-конфликт
Проблема с утечкой памяти
причина
решение
АКС
Основная идея
состояние
очередь CLH
состав
принцип
преимущество
Отличная производительность, низкие накладные расходы на установку и снятие блокировок.
справедливый замок
Просто реализовать и легко понять
Сильная масштабируемость
недостаток
Операция вращения приведет к большой нагрузке на процессор, если блокировка удерживается в течение длительного времени.
Одна функция и не может поддерживать сложные функции.
Варианты когорты CLH
AQS меняет операцию вращения на операцию блокировки потока
Улучшения для блокировки структур данных.
Расширьте состояние каждого узла
СИГНАЛ
РАСПРОСТРАНЯТЬ
СОСТОЯНИЕ
ОТМЕНЕНО
Явно поддерживать узлы-предшественники и преемники.
Оптимизация вспомогательного GC, например, явная установка узла удаления из очереди в ноль.
Принципиальная схема
общий замок
эксклюзивный замок
Реентерантлокок
что
принцип
Несправедливый процесс блокировки
Когда первый поток успешно заблокирован
Внутренние данные AQS
Ошибка блокировки второго потока
Ситуация с очередью CLH
Блокировка третьего потока не удалась
Процесс блокировки честного замка
Процесс разблокировки
Процесс снятия блокировки
Ожидание данных очереди
конечные данные очереди
Состояние
Принцип реализации
Повторный входЧтениеЗаписьБлокировка
Применимая сцена
Может ли поток получить блокировку записи, если он удерживает блокировку чтения?
Блокировку чтения нельзя обновить до блокировки записи.
Семафор
Два режима
честный режим
Несправедливая модель
принцип
Обратный отсчетЗащелка
эффект
принцип
Одноразовый
ЦиклическийБарьер
Атомный класс
базовый тип
Атомное целое число
AtomicLong
АтомныйBoolean
тип массива
АтомныйЦелыйМассив
AtomicLongArray
Атомная ссылкаМассив
ссылочный тип
Атомная ссылка
AtomicStampedReference
Тип изменения свойства объекта
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater