Pregunta

Me gustaría preguntar si Java utilizará más recursos de CPU cuando los subprocesos están bloqueados, es decir, esperando para bloquear un monitor que actualmente está siendo bloqueado por otro hilo.

Ahora estoy mirando un volcado de hilos por el cual algunos hilos están bloqueados mientras esperan para bloquear un monitor, y no estoy seguro de si eso es lo que puede ser responsable del alto uso de la CPU.

¡Gracias!

Editar (6 de mayo de 2011) Olvidé mencionar si este comportamiento es relevante para Java SE 1.4.2.

¿Fue útil?

Solución

Los hilos consumen recursos como la memoria. Un hilo de bloqueo/desbloqueo incurre en un costo de una vez fuera. Si un hilo bloquea/desbloquea decenas de miles de veces por segundo, esto puede desperdiciar cantidades significativas de CPU.

Sin embargo, una vez que se bloquea un hilo, no importa cuánto tiempo esté bloqueado, no hay un costo continuo.

Otros consejos

La respuesta no es tan simple. Puede haber casos en los que los hilos que entran en el estado bloqueado pueden terminar causando la utilización de la CPU.

La mayoría de los JVM emplean algoritmos de bloqueo escalonados. Los a menudo involucran algoritmos como spinlocks, especialmente para cerraduras, mantenidas por una corta duración. Cuando un hilo intenta adquirir un monitor y descubre que no puede, el JVM en realidad puede ponerlo en un bucle y hacer que el hilo intente adquirir el monitor, en lugar de que el contexto lo cambie de inmediato. Si el hilo no logra adquirir el bloqueo después de un cierto número de intentos o duración (dependiendo de la implementación de JVM específica), el JVM cambia a un modo de "bloqueo de grasa" o "bloqueo inflado" donde cambia el contexto del hilo.

Es con el comportamiento del spinlock donde puede incurrir en costos de CPU. Si tiene código que mantiene bloqueado durante una duración muy corta y la contención es alta, entonces puede ver un aumento apreciable en la utilización de la CPU. Para algunas discusiones sobre diversas técnicas que los JVM utilizan para reducir los costos en la contención, ver http://www.ibm.com/developerworks/java/library/j-jtp10185/index.html.

No, hilos que están bloqueados en un monitor no Tome el tiempo adicional de la CPU.

El hilo suspendido o bloqueado no consume ningún tiempo de CPU.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top