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로 돌아간다.
'JAVA > Java2021-3' 카테고리의 다른 글
Multi-Thread 프로그래밍과 동기화(Critical section, semaphore) (0) | 2021.10.29 |
---|---|
Thread 클래스의 메서드(우선순위,join(),interrupt(),Thread종료) (0) | 2021.10.29 |
Thread 생성 (extends Thread, implements Runnable) (0) | 2021.10.29 |
RandomAccessFile 클래스 (0) | 2021.10.29 |
File 클래스 (0) | 2021.10.29 |