Занимают ли блокированные потоки Java больше ресурсов процессора? - PullRequest
12 голосов
/ 05 мая 2011

Я хотел бы спросить, будет ли Java использовать больше ресурсов ЦП, когда потоки заблокированы, то есть ожидают блокировки монитора, который в данный момент заблокирован другим потоком.

Сейчас я смотрю на дамп потока, посредством чегонекоторые потоки заблокированы, так как они ожидают блокировки монитора, и я не уверен, может ли это быть причиной высокой загрузки ЦП.

Спасибо!

РЕДАКТИРОВАТЬ (6 мая 2011 г.)Я забыл упомянуть, относится ли это поведение к Java SE 1.4.2 .

Ответы [ 4 ]

21 голосов
/ 05 мая 2011

Потоки потребляют ресурсы, такие как память.Блокирующий / разблокирующий поток требует единовременной скидки.Если поток блокирует / разблокирует десятки тысяч раз в секунду, это может привести к потере значительных ресурсов ЦП.

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

15 голосов
/ 06 мая 2011

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

Большинство JVM используют алгоритмы многоуровневой блокировки.Часто используются такие алгоритмы, как спин-блокировки, особенно для блокировок, удерживаемых в течение короткого времени.Когда поток пытается получить монитор и обнаруживает, что он не может, JVM может фактически поместить его в цикл и заставить поток попытаться получить монитор, вместо того, чтобы немедленно переключать его из контекста.Если потоку не удается получить блокировку после определенного количества попыток или продолжительности (в зависимости от конкретной реализации JVM), JVM переключается в режим «полной блокировки» или «раздутой блокировки», где контекст отключает поток.

Именно с поведением спин-блокировки вы можете понести расходы на процессор.Если у вас есть код, который удерживает блокировку в течение очень короткого промежутка времени, и конкуренция высока, то вы можете заметить значительное увеличение использования ЦП.Для некоторых обсуждений различных методов, которые JVM используют для снижения затрат на конфликты, см. http://www.ibm.com/developerworks/java/library/j-jtp10185/index.html.

3 голосов
/ 05 мая 2011

Нет, потоки, заблокированные на мониторе, не требуют дополнительного времени ЦП.

1 голос
/ 05 мая 2011

Приостановленные или заблокированные потоки не занимают процессорное время.

...