2010-02-10 12 views
14

¿Cuáles son los hilos ligeros y pesados ​​en términos de Java?Hilo pesado y ligero

+1

@TFD - el OP solo hace 4 preguntas, hay suficiente tiempo para aceptar una respuesta. – ChrisF

Respuesta

1

En la mayoría de los sistemas, los subprocesos ligeros son los hilos normales que se crean con la ayuda de la biblioteca, como p_threads en linux.

Mientras que el peso pesado, en algunos sistemas, se refiere a un proceso del sistema, con su propia memoria virtual y una estructura más compleja, como información sobre el rendimiento del proceso/estadísticas.

Para más información:

http://www.computerworld.com/s/article/66405/Processes_and_Threads

http://msdn.microsoft.com/en-us/library/ms684841(VS.85).aspx

25

Está relacionado con la cantidad de "contexto" asociado con un hilo, y por consiguiente la cantidad de tiempo que se tarda en realizar un "cambio de contexto ".

Los subprocesos pesados ​​(generalmente subprocesos de nivel kernel/os) tienen mucho contexto (registros de hardware, pilas de kernel, etc.). Por lo tanto, lleva mucho tiempo cambiar entre hilos. Los subprocesos pesados ​​también pueden tener restricciones sobre ellos, por ejemplo, en algunos sistemas operativos, los hilos del kernel no pueden ser eliminados por anticipado, lo que significa que no pueden ser desactivados por la fuerza hasta que pierdan el control.

Los hilos livianos por otro lado (generalmente, los hilos del espacio del usuario) tienen mucho menos contexto. (En esencia, comparten el mismo contexto de hardware), solo necesitan almacenar el contexto de la pila del usuario, por lo tanto, el tiempo necesario para cambiar los hilos ligeros es mucho más corto.

En la mayoría de los SO, cualquier subproceso que cree como programador en el espacio de usuario será liviano en comparación con los hilos de espacio del kernel. No existe una definición formal de peso pesado y peso ligero, es solo una comparación entre hilos con más contexto e hilos con menos contexto. No olvide que cada sistema operativo tiene su propia implementación diferente de subprocesos, y las líneas entre los subprocesos pesados ​​y ligeros no están necesariamente definidas claramente. En algunos lenguajes de programación y frameworks, cuando creas un "Thread" quizás ni siquiera obtengas un hilo completo, es posible que obtengas una abstracción que oculte el número real de hilos debajo.

[Algunos sistemas operativos permiten a los hilos comparten el espacio de direcciones, por lo que las discusiones que usualmente serían bastante pesado, son ligeramente más claro]

4

Java roscas estándar son bastante pesados ​​en comparación con los hilos de Erlang que son procesos spawnable muy ligeros. Erlang muestra una máquina de estados finitos distribuidos. Sin embargo, como ejemplo, http://kilim.malhar.net/, una biblioteca de extensión de Java basada en el modelo Actor de simultaneidad, propone una construcción para subprocesos ligeros en java. En lugar de implementar Thread run(), se implementa un hilo Kilim de la biblioteca Kilim utilizando un método execute(). Al parecer, muestra que el tiempo de ejecución de Java supera al de Erlang (al menos en un entorno local AFAIK). Java realmente tenía tales cosas en la especificación del lenguaje original llamadas 'hilos verdes' pero las versiones posteriores de Java las descartaban en favor de los hilos nativos

Cuestiones relacionadas