2008-11-03 11 views
9

Mi aplicación utiliza muchos hilos de Java. Estoy buscando una comprensión confiable de cómo la JVM (versión 5 y 6) asigna los hilos de Java a los hilos de Windows subyacentes. Sé que hay un documento para mapear hilos de Solaris, pero no de Windows.¿Cómo correlaciona Sun JVM los hilos de Java con los hilos de Windows?

¿Por qué Sun no publica esta información?

Quiero saber si hay un mapeado 1: 1, o si varía según la JVM, por -server opción, por la carga de trabajo, etc, etc.

Yo sé que no soy "se supone" a la atención, Debo escribir correctamente el código synchronisd, pero estoy heredando un gran cuerpo de código ...

Además, ¿alguien sabe cómo dar nombres a los hilos de Windows?

+0

Me sorprendería si hace algo más avanzado que 1: 1-scheduling. – JesperE

Respuesta

6

No tiene un documento para usted, pero desde la columna Subprocesos en el administrador de tareas puede adivinar de manera bastante confiable que asigna 1: 1 a subprocesos nativos (primero debe habilitar la columna Subprocesos en el administrador de tareas)

Ah, casi se olvidó, puede descargar el jdk src here y mírese.

1

El mapeo depende de la plataforma, sin embargo encontré un comparison interesante entre los hilos de la plataforma para el vm (aunque probablemente sea un poco viejo). La conclusión es: no necesitas saber. Lo que probablemente le interese más es saber acerca de green threads (si aún no lo sabe).

En cuanto a la pregunta de nomenclatura: ¿El constructor no le permite nombrar un hilo? ¿O quiere decir nombrarlos y ver su nombre en algún buscador de hilos de Windows?

0

How to name a Win32 thread

Desafortunadamente, esto parece que es imposible o al menos muy difícil de hacer dentro de la JVM de Windows.

+0

Siempre podría envolver algunos JNI alrededor de ese código si quisiera usarlo. –

+0

Es posible que tenga dificultades para encontrar el ID del hilo de Windows, que no coincida con el ID de hilo devuelto por la JVM. Pero, me parece que esto es algo que realmente no debería necesitar hacer en Java en primer lugar. –

+0

Recientemente he tratado con código JNI que crea Win32 AccessTokens, y puede ser que estos tokens solo funcionen en el subproceso del sistema operativo donde se crearon ... aunque no estoy seguro. –

0

La especificación JVM no dice nada estrictamente al respecto. Queda a la altura de los implementadores de JVM el mapeo de los toads de Java a los theads de plataforma (Windows, Linux, etc.). También es difícil de creer que habrá una correspondencia uno a uno entre los hilos de Java y los hilos del sistema operativo.

Cuestiones relacionadas