Java Threads/OS Threads와 Interpreted 언어로 엉망이 된 것 같습니다.Java Threads 대 OS Thread
시작하기 전에 Green Threads는 Java Threads이며 JVM에서 스레딩을 처리하고 전체 Java 프로세스가 단일 OS Thread로만 실행된다는 것을 이해합니다. 따라서 다중 프로세서 시스템에서는 쓸모가 없습니다.
내 질문에 대한 답변입니다. 두 개의 스레드 A와 B가 있습니다. 각 스레드는 10 만 줄의 독립 코드가 있습니다. 다중 프로세서 시스템의 Java 프로그램에서이 스레드를 실행합니다. 각 스레드는 다른 CPU에서 실행될 수있는 원시 OS 쓰레드가 주어질 것입니다. 그러나 자바가 해석되기 때문에이 쓰레드는 바이트 코드를 기계 명령어로 변환하기 위해 JVM과 다시 상호 작용해야합니다. 내가 맞습니까? 그렇다면 작은 프로그램보다 Java 스레드가 큰 이점이 아닐까요?
일단 핫스팟이이 두 실행 경로를 컴파일하면 모두 네이티브 스레드만큼 좋을 수 있습니까? 내가 맞습니까?
[편집] : 대체 질문은 JIT 컴파일되지 않은 코드가있는 단일 Java 스레드가 있다고 가정 할 때 해당 스레드를 만들고 시작() 할 수 있습니까? OS 스레드와 JVM이 상호 작용하여 해당 바이트 코드를 실행하는 방법은 무엇입니까?
감사
호언 장담 죄송합니다.이 답변은 예상보다 오래 걸렸습니다. ;-) –
@Sanjay : JIT가 올바르게 실행되면 스레드가 처음 실행되기 전에 완료됩니다.Essesntially JVM은 먼저 독립적 인 쓰레드와 실행을위한 OS 쓰레드에 대한 JIT를 수행한다. – Geek
@ Geek : 이미 언급했듯이 JIT와 스레드 실행은 직각이 아닌 두 가지 문제입니다. 예, Thread가 실행하려고하는 코드 조각이 이미 VM에 의해 JIT 화되었을 가능성이 있습니다. 또한 실행의 * 전달 *이 없습니다. Thread 객체에서'start()'메서드가 호출되면, 새로운 네이티브 OS 쓰레드가 생성되고 "Java 쓰레드"와 "OS 쓰레드"사이에는 포워딩이 없다. 또한 JIT는 필수는 아닙니다. 스레드가 현재 JIT 화되지 않은 코드를 실행 중일 수 있습니다. JIT는 성능 관련 최적화입니다. –