BackEnd/Java

[Java] Java 에서의 Thread, Light Weight Process

샤아이인 2022. 3. 30.

 

1. Green Thread Model (many-to-one)

JVM 1.3 이전에는 JVM 내부적으로 스레드 모델을 가지고 있어 자체적으로 개발자가 멀티스레드 코드를 작성하여 실행하면 user thread가 실행된다. 이를 green thread model이라고도 부른다.

이러한 모델은 어떠한 OS의 지원없이 완벽하게 JVM으로부터 관리되는 방식이다.

 

user thread는 개발자 입장에선 thread이지만 실제 하드웨어, 운영체제와 상관없이 JVM이 관리하는 thread로 실행되었다.

또한 한번에 단 한개의 user thread 만이 처리가 될 수 있기 때문에 이러한 모델을 many-to-one 모델이라 부른다.

이러한 many-to-one 모델인 green thread model 은 multi-core 프로세서위에서 돌아감에도 불구하고, 이러한 멀티 코어의 장점을 얻을수가 없다. 어짜피 하나의 user-thread 씩 처리된다.

한 번에 하나의 thread만 커널에 접근할 수 있으므로 OS는 스케줄링 가능한 엔티티를 하나로 인식하게 된다.

 

단점으로는, User thread들 중 하나만 block되도 나머지 User thread 모두가 block 되어버리는 병목이 존재한다.

 

2. Native Thread Model (many-to-many)

이 모델은 OS의 도움을 받아서 JVM이 thread를 관리하는 모델 입니다.

여기서 Thread는 OS 안에 구현되어 있으며, 커널영역에서 관리되게 됩니다.

 

이 모델에서는 동시에 여러 Thread 들이 공존할 수 있습니다. 따라서 이를 many-to-many 모델이라 부르기도 합니다.

여기서는 멀티코어의 힘을 효율적으로 사용할수가 있죠!

이러한 many-to-many(many user-level threads to many kernel-level threads) 모델은 다양한 one-to-one 모델의 단점을 피할 수 있었습니다. 다만 멀티 스레드 환경의 코드를 작성할째 주의할점이 많아진것 또한 사실 입니다.

 

이 모델에서는 user-level thread 라이브러리를 통해서 커널 스레드 위에 있는 user-level thread를 정교하게 스케쥴링 하게 됩니다.

커널은 현재 활동중인 thread만 관리해야 합니다.

 

JVM 1.3 이후 개발자가 멀티스레드 코드를 작성, 실행되면 운영체제 커널이 관리하는 쓰레드인 kernel 스레드와 매핑되어 실행되게 되었습니다. 즉, 기존의 Green Thread Model에서의 하나가 block되면 나머지 모두가 block되는 문제는 해결되었습니다!

 

3. Light Weight Process

Linux의 thread는 사실 process입니다. (LWP(Light-weight process)와 Process)

 

결론 부터 말하면,

user level 에서는 thread, process가 구별되지만 kernel 입장에서 모두 process로 관리하고 스케줄링 됩니다.

다시 말해 user level에서 thread는, kerenl입장에서는 LWP(light-weight process)프로세스 입니다.

 

사실 Linux 커널 에서는 Thread 라는 컨셉은 없었습니다. Linux의 thread는 process의 실행 흐름중 일부일 뿐 입니다.

process 는 여러 실행 플로우를 포함하고 있으며, 이러한 프로세스를 멀티 스레드 프로세스라고 합니다.

멀티 스레드 프로세스가 아닌의경우, 메인 실행 흐름만 존재하므로 단일 스레드 프로세스라고도 합니다.

 

이는 멀티스레드 애플리케이션도 커널에 의해 단일 프로세스로 간주되었음을 의미합니다.

각각 의 thread 는 커널 입장에서 사실 분리되어 있는 process 의 일부분에 불과하거든요!

 

LWP는 Process와 다르게 프로세스 내 자원(메모리 공간, fd 테이블, 시그널 핸들러 테이블 등)을 공유하고 있습니다.

 

4. 출처

https://docs.oracle.com/cd/E19455-01/806-3461/6jck06gqk/index.html

 

Multithreading Models (JDK 1.1 for Solaris Developer's Guide)

Multithreading Models Most multithreading models fall into one of the following categories of threading implementation: Many-to-One One-to-One Many-to-Many Many-to-One Model (Green Threads) Implementations of the many-to-one model (many user threads to one

docs.oracle.com

https://www.geeksforgeeks.org/green-vs-native-threads-and-deprecated-methods-in-java/

 

Green vs Native Threads and Deprecated Methods in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

https://www.thegeekstuff.com/2013/11/linux-process-and-threads/

 

What are Linux Processes, Threads, Light Weight Processes, and Process State

What are Linux Processes, Threads, Light Weight Processes, and Process State by Himanshu Arora on November 14, 2013 Linux has evolved a lot since its inception. It has become the most widely used operating system when in comes to servers and mission critic

www.thegeekstuff.com

 

'BackEnd > Java' 카테고리의 다른 글

[Java] JVM 구조  (0) 2022.05.19
[Java] equals, hashCode 를 같이 구현하는 이유  (0) 2022.05.08
[Java] Exception 기초  (0) 2022.02.23
[Java] StringBuilder와 StringBuffer의 차이  (0) 2022.02.14
[Java] 람다와 익명클래스의 scope  (0) 2022.01.23

댓글