Java поток работает на каком процессоре? - PullRequest
7 голосов
/ 10 июня 2009

Есть ли способ узнать, на каком процессоре (в одной или нескольких системах) работает ваш поток, используя собственные потоки Java? Если нет, то есть ли какая-нибудь библиотека, которая могла бы помочь?

Ответы [ 4 ]

2 голосов
/ 10 июня 2009

Планировщик потоков JVM зависит от JVM, поэтому не существует «универсального» решения. Насколько я знаю, нет ничего доступного из коробки, но, возможно, с использованием:

  • Солнце СП;
  • Solaris - или Mac, как Том Хотин (Tackline) указывает;
  • DTrace .

вам может повезти:

  • трассировка зонда thread-start, который имеет args[3] «Идентификатор собственного потока / идентификатора ОС. Это идентификатор, назначенный операционной системой хоста»
  • сопоставить собственный идентификатор потока / ОС с ЦП с помощью утилит, специфичных для Solaris.
0 голосов
/ 12 июня 2009

ОС будет планировать потоки на разных процессорах в разное время. Поэтому, даже если вы получите снимок того, где каждый поток работает в любой момент, он может устареть в течение миллисекунд.

Какую проблему вы пытаетесь решить? Возможно, вы можете делать то, что вы хотите, не зная об этом.

0 голосов
/ 10 июня 2009

Насколько я знаю, стандартный JDK не поддерживает его (по крайней мере, до JDK 6). Если это то, что вам действительно нужно, вам, вероятно, потребуется выполнить некоторые собственные вызовы с использованием JNI. Хороший пример можно найти здесь (хотя это не совсем то, что вам нужно, я считаю, что это хорошее начало).

Есть много другой информации, которую вы можете получить из JDK, кстати, используя класс ThreadMXBean (например, загрузка ЦП на поток), и, возможно, вы можете найти то, что ищете там .

0 голосов
/ 10 июня 2009

Я никогда не слышал о таком вызове, и я очень сомневаюсь, что он есть, так как он на самом деле не нужен и потребует дополнительного кода для конкретной платформы.

...