2009-06-10 20 views
7

¿Hay alguna manera de averiguar qué procesador (ya sea en un solo sistema o en varios sistemas) está ejecutando su subproceso, utilizando subprocesos nativos de Java? Si no, ¿hay alguna biblioteca que pueda ayudar?¿Se está ejecutando el hilo Java en qué procesador?

+1

Gracias a todos por sus respuestas. Entiendo que lo que más me preocupa es el uso de la CPU de los hilos. Esta fue solo una pregunta que hice por curiosidad :) –

Respuesta

0

Nunca he oído hablar de tal llamada, y dudo mucho que exista, ya que no es realmente necesario, y requeriría un código adicional específico de la plataforma.

2

El programador de hilos de la JVM es específico de JVM, por lo que no hay una solución 'universal'. Por lo que yo sé, no hay nada disponible listo para usar, pero quizás usando:

  • Sun JVM;
  • Solaris - o Mac, como Tom Hawtin - tachado señala;
  • DTrace.

es posible que tenga un poco de suerte:

  • traza una sonda thread-start, que tiene como args[3] el "El nativo/OS hilo ID Este es el ID asignado por el sistema operativo anfitrión."
  • mapee la ID del hilo nativo/SO a una CPU, utilizando utilidades específicas de Solaris.
+1

dtrace también está disponible en Mac OS X (lástima que el JRE esté detrás de los tiempos). –

+0

Gracias, publicación actualizada. –

0

Por lo que sé, el JDK estándar no es compatible (al menos hasta JDK 6). Si eso es lo que realmente necesita, probablemente necesite ejecutar algunas llamadas nativas usando JNI. Un buen ejemplo se puede encontrar en here (aunque no es exactamente lo que necesita, creo que es un buen comienzo).

Hay mucha otra información que puede obtener del JDK, por cierto, utilizando la clase ThreadMXBean (como el uso de CPU por hilo), y tal vez pueda encontrar lo que está buscando there.

-1

Wrong layer of abstraction.

Su programa debería preocuparse por dividir el trabajo que necesita hacer en hilos y enviarlos a la JVM para su programación. Cómo programa (la JVM, o el sistema operativo subyacente, o quien corresponda) los horarios y la CPU/núcleo en que termina su ejecución no debe ser un factor en el diseño del programa, al menos para un programa escrito para/en un entorno como Java.

0

El sistema operativo programará subprocesos en diferentes procesadores en diferentes momentos. Entonces, incluso si obtiene una instantánea de dónde se está ejecutando cada hilo en un momento dado, podría estar desactualizado en milisegundos.

¿Cuál es el problema que está tratando de resolver? Quizás pueda hacer lo que quiera sin tener que saber esto.

Cuestiones relacionadas