2010-04-07 2 views
0

자바 프로세스가 5 개의 스레드를 시작합니다. 각 스레드는 5 분이 걸립니다. 프로세스에 소요되는 최소 및 최대 시간은 어떻게됩니까? 자바 스레드와 OS 스레드에서 설명 할 수 있다면 큰 도움이 될 것입니다.멀티 스레드 프로그램을 완료하는 데 시간이 필요합니까?

편집 : OS 레벨에서 자바 스케줄 스레드를 알고 싶습니다.

+0

이 질문은 자바와 관련이 없으며 스레드와는 거의 관련이 없습니다. 그것은 수학입니다. 또한 시스템이 한 번에 얼마나 많은 스레드를 실행할 수 있는지를 알아야합니다. –

+0

누군가 스레드를 이해하도록 요청하는 것이 좋은 질문입니다. 그러나, 당신이 이미 그것을 이해하지 못한다면 당신이 물어 보는 질문이 아닙니다. 숙제 문제입니까? –

답변

4

이것은 논리 프로세서 코어의 수와 이미 실행중인 프로세스 및 스레드의 우선 순위에 따라 다릅니다. 적어도 5 개의 논리 프로세서 코어가있는 경우 이론적 최소값은 스레드 시작 및 제어에 5 분을 더한 것입니다. 사용 가능한 논리적 프로세서 코어가 하나 뿐인 경우 이론적 인 최대 값은 25 분에 작은 오버 헤드를 더한 값입니다. 언급 된 오버 헤드는 대개 수 밀리 초를 넘지 않습니다.

그러나 JVM보다 다른 프로세스의 우선 순위가 높은 실행중인 스레드가 많은 경우 이론적 인 최대 값은 예측할 수 없을 정도로 (훨씬) 높을 수 있습니다.

편집 : OS 레벨에서 자바 스케줄 스레드를 알고 싶습니다.

JVM은 다른 원시 스레드를 생성하고 JVM 자체와 관련된 프로세스에 할당됩니다.

+0

단일 프로세서 코어에서 이론적으로 최소 (최대가 아님)의 25 분이 아니겠습니까? –

+0

@ 케빈 : 다른 관점에서 예 :) – BalusC

1

최소 시간, 5 분. 스레드가 상호 종속성없이 완전히 동시에 실행되고 전용 코어를 사용할 수 있다고 가정합니다. 각 스레드가 일부 전역 자원을 독점적으로 사용해야하므로 다른 스레드와 병렬로 실행할 수 없다고 가정 할 경우 최대 시간은 25 분입니다.

0

멀티 스레드 프로그램에 종종 교착 상태 버그가 포함되어 있기 때문에 glib (하지만 현실적인 대답)은 완료하는 데 무한한 시간이 걸릴 수 있습니다.

0

다릅니다. 이 양을 정하기위한 정보가 충분하지 않습니다.

누락 정보 : 하드웨어 - CPU에서 동시에 실행할 수있는 스레드 수입니다. 작업량 - 5 분 ​​동안 작업을 수행 중이거나 약 5 분이 걸리고 많은 CPU 리소스를 사용하는 일부 계산을 수행하기 때문에 5 분이 소요됩니다.

동시에 여러 스레드를 실행하면 리소스 잠김 대기가 발생하거나 스레드가 실행될 필요가있을 수 있으며 5 분 동안 실행 중이지만 CPU 초만있을 수 있습니다.

5 개의 스레드가 절대로 출력되지 않습니다. 가까이 다가 갈 수는 있지만 결코 5X에 도달하지는 않습니다.

0

스레드가 소비 한 CPU 시간을 찾고 있는지 확실하지 않습니다. 이런 경우, 당신은

ThreadMXBean tb = ManagementFactory.getThreadMXBean() 
long startTime= tb.getCurrentThreadCpuTime(); 

전화 endTime- 사용자 사이의 위의 스레드가 생성

long endTime= tb.getCurrentThreadCpuTime(); 

의 차이 아래 참조 CPU 시간을 측정 할 수 있습니다 - starTime, 스레드가 CPU 시간입니다 used

관련 문제