개발자 준비/운영체제

[OS] 스레드(Feat. Java Thread) -4

osul_world 2022. 5. 31. 17:31
728x90

스레드(Thread)

Light Weight Process 라고도 불리며, 프로세서(cpu) 활용의 기본 단위 이다.

 

프로세스에게 할당되는 메인 메모리 영역(리소스 영역 + 제어 영역) 중 제어 영역만 분리되어 있다.

 

따라서 스택영역, 레지스터 정보 , 프로그램 카운터  제어정보 등을 제외한 나머지 리소스 영역(코드,데이터,힙)은 공유한다.

 

 

 

프로세스와 스레드

하나의 프로세스는 하나의 커널 수준 메인 스레드로 이루어져 있다. 

 

이 메인 스레드는 cpu와 연결된다.

 

스레드의 장점

스레드는 프로세서 활용의 기본 단위로써, 멀티 프로세서를 이용할 수 있게 되고,

 

병렬 수행이 가능해 짐으로써,  응답성이 증가하고 효율성이 증가한다.

 

또한,  멀티 프로세싱에 비해 컨텍스트 스위칭 효율이 높다

 

 

스레드 구현 방법

스레드는 세 가지로 구분할 수 있다.

  • 사용자 수준 스레드
  • 커널 수준 스레드
  • 혼합형 스레드

 

커널 수준 스레드는 말 그대로 커널이 관리하는 스래드 이며, 사용자 수준 스레드는 사용자 영역의 스레드 라이브러리를 통해 구현된 스레드를 일컫는다.

 

사용자 수준 스레드 (1:N)

커널은 스레드의 존재를 모르기 때문에 개입이 없어, 생성 관리의 오버헤드가 적고, 유연한 관리가 가능하며 이식성이 높다.

 

*프로세스가 실행되기 위해 최초에 할당 받은 하나의 커널 수준 스레드만 존재하고, 프로세스 내부에 여러개의 사용자 수준 스레드가 존재하는 걸 볼수있다.

 

이때문에 하나의 스레드라도 block 되면 모든 스레드가 대기해야 한다는 단점이 있다. 

 

 

커널 수준 스레드(1:1)

커널 영역에서 직접 스레드를 생성, 관리 한다. 1:1 맵핑되어 있기 때문에 병행 수행이 가능하다.

하나의 스레드가 block 되어도, 다른 스레드는 계속 작업이 가능하다.

 

* 하나의 프로세스에 여러개의 커널 수준 스레드가 맵핑된것을 볼수있다.  

 

혼합형 스레드(N:M)

생성 관리의 오버헤드가 적고, 유연한 관리가 가능하며 이식성이 높은, 사용자 수준 스레드 

완벽한 병행 수행이 가능커널 수준 스레드적절히 혼합하여 구현한 스레드이다.

 

가장 효율적이면서 유연하다.

 

* 병행 수행이 필요한 부분에는 커널 수준 스레드를 생성하고, 유연한 처리가 필요한 부분에는 사용자 수준 스레드를 사용한다.

 

 

자바의 스레드는 어떤 수준인가?

자바가상머신이 생성하는 쓰레드를 운영체제 커널에 일일이 쓰레드 요청을 해서 매핑을 시킨다면, 자바가상머신은 운영체제의 커널 쓰레드에 종속이 될 것이다,

 

이런 쓰레딩 모델을 자바에서는 native thread라 부른다.

 

현대적인 JVM은 대부분 native thread 모델을 사용하고 있다. 즉, 커널과 1:1맵핑되는 커널 수준 스레드를 사용한다는 것이다. (예전에는 green thread라고 사용자 영역 스레드만 지원했다고 한다. 이제는 지원 x)

 

(원래 스래드 라이브러리는 응용프로그램을 위한 사용자 수준 스레드를 지원하지만)

자바는 JVM 덕분에 자바의 스레드 라이브러리를 이용해 커널 수준 스레드를 손쉽게 생성,제어 할 수 있다.

 

찾아보는 중이지만 혼합형 스레드 모델도 구현 할 수 있을 것 같다.

 

 

 

Reference

https://www.youtube.com/watch?v=YlnvCIZQDkw&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=7 

https://stackoverflow.com/questions/2653458/understanding-javas-native-threads-and-the-jvm

 

Understanding java's native threads and the jvm

I understand that the jvm is itself an application that turns the bytecode of the java executable into native machine code, but when using native threads I have some questions that I just cannot se...

stackoverflow.com

https://velog.io/@recordsbeat/%EC%8A%A4%EB%A0%88%EB%93%9C-%EB%8F%84%EB%8C%80%EC%B2%B4-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B8%B8%EB%9E%98

 

스레드 도대체 무엇이길래 나를 힘들게 하나?(JAVA)

자바를 접하다 보면 항상 따라오는 이야기 중 하나가 바로 스레드에 대한 것이다. 스레드는 동기화, 데드락, 크리티칼 섹션 등 수 많은 고려사항을 갖고 있는지만 막상 본인은 스레드가 뭐고 어

velog.io

 

728x90