2012-04-28 9 views
7

En la concurrencia de Java, ¿qué hace que un hilo "active"? ¿Solo el hecho de que no está al ralentí? ¿Un hilo "en espera" o "suspendido" todavía se considera, técnicamente, activo?¿Qué define un hilo "activo"?

+2

¿Cuál es el contexto donde aparece "activo"? Es un término demasiado general para proporcionar una definición difícil con tan poca información. –

+0

"En general, es aceptable tener de 4 a 20 hilos activos por núcleo". – IAmYourFaja

+0

Un hilo 'java' activo es un hilo * elegible * para ser el hilo de ejecución actualmente en ejecución. Es un hilo que ha dejado el estado "nuevo" y ha alcanzado (o vuelto a alcanzar) el estado "ejecutable". Los hilos activos asumen la residencia en el grupo de subprocesos ejecutables. Es un error común que el término sensible al contexto * activo * se tome como "el hilo ejecutable que se está ejecutando actualmente". – 8bitjunkie

Respuesta

5

Por lo que puedo decir, el término 'activo' parece ser usado mucho pero no definido. El método ThreadGroup.enumerate() se documenta a:

copias en la matriz especificada cada hilo activo en este grupo de hilos y sus subgrupos.

y de looking at the source for this, se está comprobando el método Thread.isAlive() y la adición de aquellos a la enumerable. De esto deduzco que los términos 'activo' y 'vivo' son intercambiables y 'vivo' se define como:

Un hilo está activo si se ha iniciado y aún no ha muerto.

1

En este contexto, tomo "activo" para indicar que están ejecutando el código. Los hilos inactivos, aquellos que están bloqueados en llamadas de E/S o en espera de bloqueos, consumen solo recursos de memoria sin afectar la CPU (o solo marginalmente).

Sin embargo, realmente depende de lo que estén haciendo sus hilos. Si cada subproceso se itera sobre números para calcular números primos, están totalmente vinculados a la CPU, y realmente solo debería tener uno por núcleo para maximizar el rendimiento. Si realizan solicitudes HTTP o realizan E/S de archivos, puede permitirse tener bastantes por núcleo.

Al final, una declaración general que cubra todos los hilos en general sin tener en cuenta lo que están haciendo es bastante inútil.

Recomiendo encarecidamente el libro Java Concurrency in Practice para un tratamiento de alta calidad del tema de la programación simultánea de Java.

0

Aquí se usa la palabra "activo" en inglés normal.

Un significado normal en inglés de la palabra active es "hacer algo". Entonces, un significado intuitivo de "activo" para los hilos es que realmente se están ejecutando o están listos para ejecutarse.

En el contexto de esta cita:

"En general, es aceptable tener 4 - 20 hilos activos por núcleo"

la palabra "activo" se utiliza constantemente con este , aunque discutiría con los números. (20 es bastante alto, IMO).

Sin embargo, yo diría que esta es una declaración intencionalmente vaga. Los obsequios son el uso de la frase comadreja "es generalmente aceptado" (en lugar de citar fuentes específicas) y el amplio rango ("4 - 20"). Por lo tanto, podría argumentar que la palabra "activo" es otro ejemplo de vaguedad intencional.

IMO, el autor de la cita intenta hacer el comentario general de que "demasiados hilos son malos" ... sin ser preciso acerca de lo que es "demasiados". Extraer una guía más precisa atando lo que quiere decir con "activo" no tiene sentido.(Y para ser claro, no es posible decir cuántos "demasiados" es ... en general.)

1

Tome un vistazo a java.lang.Thread.State

En otros no Sistemas Java, activo equivale a "RUNNABLE". Una Tarea/Proceso/Subproceso está activo si es capaz de ejecutar código activamente. Se suspende si no lo está (bloqueo, etc.)

Como dijo Stephen C, active se usa más como inglés que como Java aquí.

0

"En general, es aceptable tener entre 4 y 20 hilos activos por núcleo". - Adam Tannon

En este sentido, creo que la palabra significa "listo para funcionar" en lugar de "vivo" o cualquiera de los otros posibles significados. Tiene sentido no tener más que un puñado de subprocesos en la lista de espera, porque no está obteniendo ningún valor para los subprocesos en espera, y usted contribuye a la programación y a la sobrecarga del cambio de contexto. Por otro lado, si tiene menos hilos listos para ejecutar que núcleos, no está haciendo uso del recurso disponible.

+0

http://stackoverflow.com/questions/3275210/what-is-the-thread-state-of-a-thread-after-thread-yield – andersoj

Cuestiones relacionadas