Одним из четырех основных изменений, внесенных в java 6 в отношении улучшения производительности встроенных замков, является метод адаптивного спиннинга. Что такое адаптивное вращение? Является ли это комбинацией spinlocks и блокировки мьютекса? Может ли кто-нибудь объяснить в удобном для понимания способом полезность этой стратегии, которая по умолчанию доступна из JDK6 и далее.
Что такое адаптивное вращение w.r.t блокировки?
Ответ 1
Что такое адаптивный спиннинг?
Чтобы процитировать эту страницу производительности Java 6:
Адаптивное вращение - это метод оптимизации, при котором потоки, пытающиеся выполнить согласованную синхронизированную операцию ввода, используют двухфазную стратегию вращения-затем-блока. Этот метод позволяет потокам избегать нежелательных эффектов, которые влияют на производительность, таких как переключение контекста и повторное заполнение буферов внешнего вида перевода (TLB). Он является "адаптивным", потому что продолжительность вращения определяется политическими решениями, основанными на таких факторах, как скорость успеха и/или неудача недавних попыток вращения на том же мониторе и состояние текущего владельца блокировки.
Поэтому потоки сначала пытаются вращаться пару раз, пытаясь получить блокировку перед тем, как фактически блокировать. Затем в будущем он использует предыдущие показатели успеха/неудачи, чтобы адаптивно определить, стоит ли ему пытаться вращаться или блокироваться. Спиннинг тратит впустую процессорное время, в то время как блокировка может вызвать переключение контекста, и поток может ждать более длительное время, чем необходимо. Цель состоит в том, чтобы попытаться оптимизировать обе эти проблемы на основе прошлого поведения.
Для получения более подробной информации, документация по производительности ссылается на эту презентацию под названием Dave Dice под названием " Синхронизация в Java SE 6 (HotSpot) ". Первый слайд озаглавлен "Предполагаемые затраты (масштабируемость + задержка)":
- Переключение контекста очень дорого
- Неограниченное вращение недопустимо
- Адрес с помощью адаптивного вращения
Далее в презентации есть слайд под названием "Адаптивное прядение":
- Спин-то-блок-стратегия
- Старайтесь избегать переключения контекста, вращаясь в [многопроцессорных] системах
- Продолжительность вращения
- Поддерживается на монитор
- варьируется в зависимости от недавней истории успеха/провала вращения
- Адаптируется к нагрузке системы, параллелизму, модальности приложения
- [многопроцессорный] -polite спиннинг
- Избегайте вращения в бесполезных условиях (владелец заблокирован)
Интересные вещи.