2009-06-10 3 views
7

Java 원시 스레드를 사용하여 스레드가 실행중인 프로세서 (단일 시스템 또는 다중 시스템 중 하나)를 찾는 방법이 있습니까? 그렇지 않다면 도움이 될만한 라이브러리가 있습니까?프로세서에서 실행중인 Java 스레드는 무엇입니까?

+1

답장을 보내 주셔서 감사합니다. 내가 더 걱정해야 할 것은 스레드의 CPU 사용량에 관한 것입니다. 이것은 호기심에서 물어 본 질문 일뿐입니다. –

답변

0

필자는 그러한 호출에 대해 들어 본 적이 없으며 실제로 필요하지 않으므로 의심 스럽습니다. 추가 플랫폼 관련 코드가 필요합니다.

2

JVM의 스레드 스케줄러는 JVM에 따라 다르므로 '보편적 인'솔루션이 없습니다. 내가 아는 한 즉시 사용할 수있는 것은 없지만 아마도 다음을 사용합니다.

  • Sun JVM;
  • Solaris - 또는 Mac의 경우 으로 표시됩니다. Tom Hawtin - tackline;
  • DTrace.

당신은 약간의 행운이있을 수 있습니다 :

  • 추적 args[3]는 AS가있는 thread-start 프로브,
  • "네이티브/OS 스레드 ID는이 호스트 운영 체제에 의해 할당 된 ID입니다." Solaris 전용 유틸리티를 사용하여 기본/OS 스레드 ID를 CPU에 매핑하십시오.
+1

dtrace는 Mac OS X에서도 사용할 수 있습니다 (JRE는 시대에 뒤떨어질 것입니다). –

+0

감사합니다. 업데이트 된 게시물. –

0

표준 JDK는 (적어도 JDK 6 이상에서는) 표준 JDK를 지원하지 않습니다. 이것이 정말로 필요한 경우 JNI를 사용하여 일부 기본 호출을 실행해야 할 것입니다. 좋은 예가 here입니다 (정확히 필요한 것은 아니지만, 좋은 시작이라고 생각합니다).

그런데 ThreadMXBean 클래스 (스레드 당 CPU 사용량 등)를 사용하여 JDK에서 얻을 수있는 많은 정보가 있으며 there을 찾고있을 수 있습니다.

-1

잘못된 추상화 계층.

프로그램은 스레드로 수행해야 할 작업을 나누어서 스케줄링을 위해 JVM에 제출하는 것에 관심을 가져야합니다. 스레드 (JVM 또는 기본 운영 체제 또는 그와 관련하여 문제가되는 사용자) 일정과 스레드가 실행되는 CPU/코어가 최소한 환경을 위해 작성된 프로그램의 경우 프로그램 디자인의 요소가되어서는 안됩니다 자바처럼.

0

OS는 다른 시간에 다른 프로세서의 스레드를 예약합니다. 따라서 각 순간에 각 스레드가 실행중인 위치의 스냅 샷을 얻더라도 밀리 초 내에 만료 될 수 있습니다.

해결하려는 문제는 무엇입니까? 아마 당신이 이것을 알 필요없이 원하는 것을 할 수 있습니다.