문제

스레드가 차단 될 때 Java가 더 많은 CPU 리소스를 사용할 것인지 묻고 싶습니다. 즉, 현재 다른 스레드에 의해 잠긴 모니터를 잠그기를 기다리고 있습니다.

지금은 모니터를 잠그려고 대기하면서 일부 스레드가 차단되는 스레드 덤프를보고 있는데, 이것이 높은 CPU 사용량에 대한 책임이 있는지 확실하지 않습니다.

감사합니다!

편집 (2011 년 5 월 6 일)이 동작이 Java SE 1.4.2 와 관련이 있는지 언급하는 것을 잊었습니다.

도움이 되었습니까?

해결책

스레드는 메모리와 같은 자원을 소비합니다.차단 / 차단 해제 스레드는 한 번 꺼짐 비용을 초래합니다.스레드가 초당 수만 시간을 차단 / 차단 해제하면 상당한 양의 CPU를 낭비 할 수 있습니다.

스레드가 차단되면 아무런 차단 된지를 중요하지 않습니다. 지속적인 비용이 없습니다.

다른 팁

대답은 그렇게 간단하지 않습니다. 차단 된 상태로 들어가는 스레드가 CPU 사용률이 발생할 수있는 경우가있을 수 있습니다.

대부분의 JVM은 계층화 된 잠금 알고리즘을 사용합니다. 짧은 기간 동안 고정 된 잠금 장치에 대해 스핀 락과 같은 알고리즘을 자주 포함합니다. 스레드가 모니터를 획득하고 찾을 수 없게되면 JVM은 실제로 루프에 넣고 문맥을 즉시 전환하지 않고 모니터를 획득하려고 시도 할 수 있습니다. 스레드가 특정 수의 시도 또는 기간 (특정 JVM 구현에 따라 다름) 이후로 잠금을 획득하지 못하면 JVM은 "FAT LOCK"또는 "inflated Lock"모드로 스레드를 스레드로 전환합니다.

CPU 비용이 발생할 수있는 스핀 록 동작이 있습니다. 매우 짧은 기간 동안 잠금 장치를 보유하고있는 코드가 있고 경합이 높으면 CPU 사용률에서 상당한 범프를 볼 수 있습니다. 다양한 기술에 대한 몇 가지 논의는 경합에 대한 비용을 줄이기 위해 사용하는 JVMS를 사용하여 http://www.ibm.com/developerworks/java/library/j-jtp10185/index.html .

아니오, 모니터에서 차단 된 나사산은 not 추가 CPU 시간을 차지합니다.

일시 중단되거나 차단 된 스레드는 CPU 시간을 소비하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top