Что такое адаптивное вращение w.r.t блокировки?

Одним из четырех основных изменений, внесенных в java 6 в отношении улучшения производительности встроенных замков, является метод адаптивного спиннинга. Что такое адаптивное вращение? Является ли это комбинацией spinlocks и блокировки мьютекса? Может ли кто-нибудь объяснить в удобном для понимания способом полезность этой стратегии, которая по умолчанию доступна из JDK6 и далее.

Ответ 1

Что такое адаптивный спиннинг?

Чтобы процитировать эту страницу производительности Java 6:

Адаптивное вращение - это метод оптимизации, при котором потоки, пытающиеся выполнить согласованную синхронизированную операцию ввода, используют двухфазную стратегию вращения-затем-блока. Этот метод позволяет потокам избегать нежелательных эффектов, которые влияют на производительность, таких как переключение контекста и повторное заполнение буферов внешнего вида перевода (TLB). Он является "адаптивным", потому что продолжительность вращения определяется политическими решениями, основанными на таких факторах, как скорость успеха и/или неудача недавних попыток вращения на том же мониторе и состояние текущего владельца блокировки.

Поэтому потоки сначала пытаются вращаться пару раз, пытаясь получить блокировку перед тем, как фактически блокировать. Затем в будущем он использует предыдущие показатели успеха/неудачи, чтобы адаптивно определить, стоит ли ему пытаться вращаться или блокироваться. Спиннинг тратит впустую процессорное время, в то время как блокировка может вызвать переключение контекста, и поток может ждать более длительное время, чем необходимо. Цель состоит в том, чтобы попытаться оптимизировать обе эти проблемы на основе прошлого поведения.

Для получения более подробной информации, документация по производительности ссылается на эту презентацию под названием Dave Dice под названием " Синхронизация в Java SE 6 (HotSpot) ". Первый слайд озаглавлен "Предполагаемые затраты (масштабируемость + задержка)":

  • Переключение контекста очень дорого
  • Неограниченное вращение недопустимо
  • Адрес с помощью адаптивного вращения

Далее в презентации есть слайд под названием "Адаптивное прядение":

  • Спин-то-блок-стратегия
    • Старайтесь избегать переключения контекста, вращаясь в [многопроцессорных] системах
  • Продолжительность вращения
    • Поддерживается на монитор
    • варьируется в зависимости от недавней истории успеха/провала вращения
  • Адаптируется к нагрузке системы, параллелизму, модальности приложения
  • [многопроцессорный] -polite спиннинг
  • Избегайте вращения в бесполезных условиях (владелец заблокирован)

Интересные вещи.