2014-02-11 1 views
0

N 개의 스레드를 생성하고 시작하는 Java 응용 프로그램이 있다고 가정 해 봅니다. Linux 또는 Windows 컴퓨터에서 4 코어로 실행합니다. 나는 내 응용 프로그램이 많은 수의 스레드를 만들면 언제든지 그 중 4 개 (또는 코어가 하이퍼 스레딩을 사용하는 경우 더 많은 수)를 동시에 실행한다고 가정합니다.실제로 병렬로 실행되는 응용 프로그램의 스레드 수 확인 및 제어

  1. 확인/확인 방법이 있습니까? Java에서 Runtime.getRuntime().getAvailableProcesses()을 인쇄 할 수 있지만이 번호는 항상 병렬로 실행되는 스레드 수를 의미합니까? 오히려 일부 OS 설정을 조사해야합니까?
  2. OS 또는 일부 JVM 설정에 의해 병렬 처리가 수행 될 수 있습니까? (X 작업을 동시에 실행할 수 있다고해도 앱은 X/2만으로 제한됩니다).

답변

1

예를 들어 Windows TaskManager을보십시오 (다른 OS에는 유사한 도구가 있음). 둘 다 대답합니다 : 각 개별 코어에 대한 CPU로드를 표시하여 병렬로 실행되는 양을 볼 수 있습니다. 또한 프로세스를 마우스 오른쪽 버튼으로 클릭하고 해당 프로세스의 핵심 사용을 제한하도록 OS에 지시 할 수 있습니다. Windows 7 및 Java 7u40을 사용하는 컴퓨터에서 Runtime.availableProcessors() 메서드는 TaskManager를 사용하여 변경 한 즉시 변경된 프로세서 수를 반영합니다.

그러나 프로세스가 모든 코어 (기본값)를 사용할 수있는 경우에도 다른 프로세스가 동시에 하나 이상의 코어를 사용하는 경우 사용량이 더 적을 수 있습니다. 그것은 멀티 태스킹입니다. 한 번에 실제 코어 수를 얻으려는 모든 시도가 다음 나노초만큼 바뀔 수 있다는 사실 때문에 쓸모 없게됩니다.

소프트웨어를 복잡하게 만들 필요가 없습니다. Runtime.availableProcessors()에보고 된 것처럼 코어 수와 일치하는 스레드 수를 사용하면 (다치게하지 않아도됩니다.) 모든 코어를 사용하는 것이 가장 좋습니다. 응용 프로그램에서 모든 코어를 사용할 수 없으면 몇 가지 스레드의 오버 헤드가 무시할만큼 중요하지 않으므로 문제가되지 않습니다. 우리는 수천 개의 스레드에 대해 이야기하지 않습니다 ...

리소스를 너무 적게 사용하면 리소스가 사용되지 않을 수 있습니다.

관련 문제