인프런 커뮤니티 질문&답변

hoonseung님의 프로필 이미지
hoonseung

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

사용자 수준 스레드 & 커널 수준 스레드

native 자바 스레드 동작 원리 질문

작성

·

262

·

수정됨

0

안녕하세요. 강사님

제가 이해하고 있는 게 맞는지 궁금하여 질문드립니다.

자바 코드에서 두 개의 스레드를 생성하여 실행될 때의

아래 메커니즘이 맞을까요..?

↓ ↓ ↓

1. thread.start를 두 번 하여 시스템 콜 호출 후 커널 영역에 커널 스레드 2개 생성 후 사용자 스레드와 맵핑

-> 1 코어 하드웨어 스레드 1개가 OS 스케줄러에 의해 2개의 커널 스레드를 반복 선택하여 실행

(매핑된 사용자 스레드같이 반복)
(이 부분에서 자바 스레드는 기본적으로 동시성 방식으로 작동하고 작업을 병렬 방식으로 처리를 해야지 N 개의 코어를 사용하여 동시 처리되는 건가요?)

--------------------------------------------------

2. 커널 스레드는 사용자 스레드의 존재를 모르고 프로세스의 존재만 알고 있으며 PCB 정보를 가지고 있기 때문에 커널 스레드 TCB에 사용자 스레드 컨텍스 정보들을 저장하여 게속 스위칭을 반복하며 처리

답변 1

1

안녕하세요, 인프런 AI 인턴입니다.

자바의 스레드는 운영체제의 기본 스레드 기능을 활용하여 동작합니다.
설명해주신 내용은 자바 스레드의 동작 원리를 기본적으로 이해하고 계신 것으로 보입니다.

  1. thread.start()를 호출하면, 자바 가상 머신(JVM)이 운영체제의 스레드 생성 기능을 이용해 실제 스레드를 생성합니다. JVM 내에서 실행되는 스레드(사용자 스레드)가 각각의 커널 스레드에 맵핑되어 실행됩니다.

  2. 하나의 코어에서 여러 스레드를 번갈아 가면서 처리하는 것을 멀티태스킹 또는 멀티스레딩이라고 하며, 이는 운영체제의 스케줄러에 의해 관리됩니다. 실제로는 하드웨어 코어의 개수만큼의 스레드가 병렬로 동시에 실행될 수 있습니다. 따라서, N개의 코어가 있다면 이론적으로 최대 N개의 스레드가 실제로 동시에 실행될 수 있습니다.

  3. 커널 스레드는 프로세스 내의 스레드를 대표하여 운영체제와 상호작용합니다. 커널이 스케줄링하는 동안 스레드의 상태(Context)는 Task Control Block(TCB)에 저장되며, 스레드 간 전환(Context Switching) 시 이 정보를 사용하여 각 스레드의 실행 상태를 유지합니다.

자바의 스레드는 내부적으로 복잡한 메커니즘을 통해 관리되고 실행되지만, 자바 프로그래머로서는 Thread 클래스를 사용해 상대적으로 간편하게 멀티스레딩을 구현할 수 있습니다.

질문하신 자바의 스레드 동작 원리에 관한 더 자세한 내용이나 스레드를 이용한 동시성 프로그래밍 기술은 자바 공식 문서나 관련 도서를 참고하시는 것을 권장합니다.

hoonseung님의 프로필 이미지
hoonseung

작성한 질문수

질문하기