Любая JVM реализует блокировку с ожиданием вращения? - PullRequest
4 голосов
/ 13 июня 2011

В Java Concurrency in Practice авторы пишут:

Когда блокировка разрешена, проигрывающая нить (и) должна блокироваться JVM может реализовать блокировку либо через ожидание прокрутки (неоднократно пытаясь получить блокировку, пока она не преуспеет), либо приостановка заблокированного потока через операционную систему. То, что более эффективно , зависит от отношения между издержками переключения контекста и временем, когда блокировка становится доступной; ожидание вращения предпочтительно для коротких ожиданий, а приостановка предпочтительна для долгих ожиданий Некоторые JVM выбирают между двумя адаптивно, основываясь на данных профилирования прошлого времени ожидания, но большинство просто приостанавливает потоки, ожидающие блокировки.

Когда я прочитал это, я был очень удивлен. Существуют ли какие-либо известные JVM, реализующие блокировку либо при ожидании вращения, либо иногда при ожидании вращения из-за результатов профилирования? В это трудно поверить.

Ответы [ 2 ]

4 голосов
/ 13 июня 2011

Вот свидетельство того, что JRockit может использовать спин-блокировки - http://forums.oracle.com/forums/thread.jspa?threadID=816625&tstart=494

И если вы выполните поиск "spin" в параметрах JVM, перечисленных здесь , вы увидите доказательства использования / поддержки спин-блокировок в JVM Hotspot.

2 голосов
/ 13 июня 2011

То, что написали авторы, правильно и имеет смысл.Это верно и для Linux.Логическое обоснование того, почему используются спин-блокировки, заключается в том, что большинство ресурсов защищены в течение доли миллисекунды.Таким образом, чтобы приостановить, поместите все содержимое регистров в стек и освободите ЦП - это слишком много и не стоит.Таким образом, даже несмотря на то, что он просто вращается в узком наборе инструкций, иногда просто тратит время, он все же намного эффективнее, чем замена.

При этом, с профилированием виртуальной машины, в идеале это сделает вашу обработку болееэффективный.Как таковой, есть ли особый случай, который вы всегда хотите приостановить?Или, может быть, всегда крутишь?

...