2009-06-10 7 views
7

Javaネイティブスレッドを使用して、スレッドが実行されているプロセッサ(単一のシステムまたは複数のシステムのいずれか)を見つける方法はありますか?そうでなければ、助けることができる図書館はありますか?Javaスレッドはどのプロセッサで実行されていますか?

+1

ありがとうございました。私は、スレッドのCPU使用量をもっと気にする必要があることを理解しています。これは好奇心から尋ねた単なる質問でした:) –

答えて

0

私はそのような呼び出しを聞いたことがなく、実際には必要ではないため、プラットフォーム固有のコードが余分に必要になるため、1つあります。

2

JVMのスレッドスケジューラはJVM固有のものであるため、「普遍的な」ソリューションはありません。私が知る限り、すぐに使えるものは何もありませんが、おそらく次のものを使用しています:

  • Sun JVM;
  • Solaris - またはMacの場合、として、Tom Hawtin - tacklineを指摘します。
  • DTrace

あなたは、いくつかの運を持っているかもしれません:

  • トレースargs[3]として持ってthread-startプローブ、
  • 「ネイティブ/ OSスレッドIDは、これは、ホスト・オペレーティング・システムによって割り当てられたIDです。」 Solaris固有のユーティリティを使用して、ネイティブ/ OSスレッドIDをCPUにマップします。
+1

dtraceはMac OS Xでも利用できます(JREは時代遅れです)。 –

+0

ありがとう、更新された投稿。 –

0

私が知っている限り、標準のJDKはそれをサポートしていません(少なくともJDK 6まで)。それが本当に必要な場合は、おそらくJNIを使​​っていくつかのネイティブコールを実行する必要があります。良い例はhereです(あなたが必要とするものではありませんが、それは良いスタートだと思います)。

ところで、ThreadMXBeanクラス(スレッドごとのCPU使用率など)を使用してJDKから得ることができる多くの情報があります。thereを探しているかもしれません。

-1

抽象レイヤーが正しくありません。

あなたのプログラムは、必要な作業をスレッドに分割してスケジューリングのためにJVMに送信することを心配する必要があります。どのスレッドがどのスレッド(どのJVMか、それともそのオペレーティングシステムか、それとも誰か)のスケジュールとどのスレッドがどのCPU /コアで実行されて終了するかは、プログラム設計上の要因ではないはずですJavaのように。

0

OSは、異なる時間に異なるプロセッサ上のスレッドをスケジュールします。だから、たとえ各スレッドがいつ実行されているかのスナップショットを取得しても、ミリ秒以内に期限切れになる可能性があります。

あなたが解決しようとしている問題は何ですか?おそらくこれを知らなくても、あなたがしたいことをすることができます。

関連する問題