2013-11-20 1 views
0

운영체제 개념을 공부하면서 커널 레벨과 사용자 레벨이라는 두 가지 유형의 스레드가 있음을 알게되었습니다.다중 프로세서 환경에서 Java 스레드를 실행할 수 있습니까?

또한 커널 수준의 스레드 또는 프로세스가 다중 프로세서 환경에서도 실행될 수 있음을 알게되었습니다.

Java 쓰레드 (사용자 레벨 쓰레드)와 관련하여 기본적인 의문점이 있으니 멀티 프로세서 환경에서 실행할 수 있습니까?

+1

다중 프로세서를 처리하기 위해 fork-join 프레임 워크를 사용하십시오. – Masudul

답변

0

처음에 대답은 '예'입니다. Java에서 다중 스레드를 작성하여 멀티 코어 프로세서의 모든 기능을 사용할 수 있습니다.

내가 아는 바에 따르면, jvm은 커널 스레드와 사용자 스레드를 모두 포함하는 혼합 스레드 모델을 사용합니다. 어떤 유형의 스레드를 만들지 결정하는 전략이 있습니다. 나는 시스템 자원이 풍부 할 때 커널 스레드를 생성하고 Java 스레드 객체를 할당하는 경향이 있다고 생각한다.

0

당신이 좋은 오래된 Java 1.1 "녹색 스레드"에 대해 말하는 것처럼 나에게 들립니다. 이것은 운영 체제가 네이티브 스레드를 지원하지 않거나 최소한 안정적인 지원을하지 못하는 것에 대한 단서가되었습니다. 이 기능은 현재 오라클의 레퍼런스 구현에 관해서는 더 이상 현재 JVM 구현에는 존재하지 않습니다. Java 스레드는 항상 이러한 JVM의 커널 스레드입니다.

그렇다면 Java 스레드는 SMP 일명 Multicore CPU의 이점을 누릴 것입니다. 운영체제가 네이티브 쓰레드 구현을 필요로하지만, 전체 SMP 기계가 없다면별로 의미가 없을 것이다. 그리고 JVM은 모든 일반적인 시스템의 경우와 마찬가지로이를 사용할 수 있어야합니다.

+0

그러나 멀티 프로세싱은 커널에 달려 있으며, 운영체제의 개념에 따르면 커널은 사용자 수준의 쓰레드를 인식하지 못하기 때문에 다중 프로세서에서 자바 쓰레드를 어떻게 인식 할 수 있습니까? – Winn

+0

사용자 수준 스레드가 없습니다. 내 대답을 다시 읽으십시오 : "Java 스레드는 항상이 JVM의 커널 스레드입니다." – Holger

+0

내가 빨리 잡을 수는 없겠지만 자바 스레드가 커널 레벨 스레드라고 JVM 프로세스에 알려져 있지만 제 질문은 원래 운영 체제 커널이 어떻게 알았습니까? 스케줄링 결정은 원래의 커널 스케줄러에 의해서만 수행되기 때문에. 그렇지 않니? – Winn

관련 문제