본문 바로가기

JAVA/Java2021-3

Thread Status (Start, Run, Runnable, Not Runnable, Dead)

1. 컴퓨터 구조(CPU, HDD, 메모리(슬롯으로 있다))

2. 프로그램을 실행 시키려고 하면 메모리에 올라간다 (Process : 프로그램이 메모리 공간을 가지고 있는 상태) 

3. 메모리에 올라간 프로그램이 실행되려면 CPU를 점유해야한다. (CPU를 점유하는 단위가 process전체가 아니라 Thread 단위)

4. Scheduler가 쓰레드를 배분하여 CPU가 실행시킨다.

 

 

Thread 란?

: 프로그램이 실행되면 OS로 부터 메모리를 할당 받아 프로세스 상태가 되고 

하나의 프로세스는 하나 이상의 thread를 가지고 되고, 실제 작업을 수행하는 단위이다.

 

각 Thread의 resource 관리 : Context 영역

공통 resource 관리 : Shared Resource에서 관리 (Critical section(경쟁이 발생하는 영역), Synchronization 중요)

ex)자바에선 static instance가 해당, C의 경우 global 변수가 해당할 수 있다.

 

Multi-Thread (Context 스위칭)

: 여러 쓰레드가 동시에 수행되는 것 같지만 여러 작업이 동시에 실행되는 효과이다.

: CPU의 스케쥴러가 CPU에 쓰레드를 배분하여 여러 쓰레드가 스위치되면서 여러 작업이 동시에 실행되는 것처럼 보이는 것.

ex 웹 프로그래밍)

: 웹프로그래밍을 할 때 멀티 쓰레드가 구현된다.(직접 구현할 필요는 없다)

웹서버에서 request가 들어오면 쓰레드를 생성하여 request(요청)들을 처리한다.

 

Thread Status (스레드 상태)

1. start 되면 스레드들은 Runnable한 상태가 되고 (CPU를 점유할 수 있는 상태)

2. CPU 점유하면 Run

3. Not Runnable (CPU를 점유할 수 없는 상태 영원히 남아있으면 좀비가 된다)

-> 세가지 메서드 호출시 Not Runnable 된다

(sleep(시간) : 시간이 지나면 Runnable 상태로,
wait() : 리소스 한정 여러쓰레드가 있을 때, 리소스가 available할 때까지 기다림(notify(),notifyAll()되면 다시 돌아감)

join() : 다른 쓰레드의 결과가 필요할 때 join으로 설정해두면 Not Runnable하다가 다른 쓰레드가 끝나면 Runnable로 돌아간다.