Program
일련의 SW의 관리 단위
실행할 명령 시퀀스
여러 프로세스로 구성된다. (Single Processing)
하나의 프로그램이 실행 데이터(Excution Unit = Instance)가 될 수 있다.
Process (or Task)
프로그램 실행 단위
Heavy weight Process (Multi-Processing)
Thread
Light weight Process
병행(Concurrent)
같이 존재하고 있다는 뜻이며, 메모리에 다수의 프로세스가 같이 존재한다는 것을 의미한다.
한 개의 CPU가 있는 단일처리 시스템에서는 병행 프로세스 중 한 개만이 실제로 실행되지만 CPU의 처리 시간을 효과적으로 나눔으로써 겉으로는 병행 프로세스들이 동시에 처리되는 것이다.
병형과 병렬(Parallel)은 다르다.
병렬은 다중처리 시스템의 경우 여러 개의 프로세스가 동시에 실행하는 것을 말한다.
동기화(Synchronization)
프로세스 간 지연 대기열 기능 (Delayed Queue function between processes)
여러 프로세스의 실행 순서 기능 지원
예: 이진 세마포어의 잠금 / 잠금 해제
상호 배타적 (Mutual Exclusive)
프로세스 간의 상호 배타성 제어
예: Read/Write, Input/Output
통신 (Communication)
프로세스 간 커뮤니케이션 지원
예: Mailbox, Socket
Process Unit의 문제
프로세스 인스턴스 작성을 위한 오버 헤드
프로세스 간 컨텍스트 전환 시 오버 헤드
여러 프로세스 제어의 오버 헤드
➕ Context Switching
현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정을 말합니다.
<Context Switching 진행 과정>
Task의 대부분 정보는 Register에 저장되고 PCB(Process Control Block)로 관리되고 있습니다.
현재 실행하고 있는 Task의 PCB 정보를 저장하게 됩니다. (Process Stack, Ready Queue)
다음 실행할 Task의 PCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행을 할 수 있습니다.
<PCB(Process Control block) 구조>
Thread unit
process unit의 오버 헤드 감소
Light weight Process
Thread의 이점
제작(creation) 오버 헤드 감소
스레드 간 컨텍스트 전환에 대한 오버 헤드 감소
주소 공간이 공유되기 때문에 리소스 공유가 쉽고 스레드 간의 통신이 쉽다.
스레드의 처리 구조
하나의 클래스 인스턴스에 여러 스레드 인스턴스가 있습니다.
Scheduling Unit: 클래스 인스턴스의 스레드 클래스 인스턴스
Thread 기반의 동시 / 다중 처리 지원
Java Thread class types
Thread class
run()
함수가 고정된다.
Runnable interface
구현을 통해 사용
run()
함수를 재구현한다.
run()
함수를 사용하려면 이 방식을 사용Import Package for java Thread
java.lang.Thread
생성자
Thread()
Thread(String)
Thread(Runnable)
Thread(Runnable, String)
메소드
static void sleep (long millis) : 현재 실행중의 thread를, 지정된 밀리 세컨드 수의 사이, sleeve (일시적으로 실행을 정지) 시킵니다.
String getName (): 이 thread의 이름을 리턴합니다.
void setName (String name): 이 thread의 이름을 인수 name에 동일해지도록 변경합니다.
void start (): 이 thread의 실행을 개시합니다.
boolean isAlive (): 이 thread가 생존하고 있을지 어떨지를 판정합니다.
void join (): 이 thread가 종료하는 것을 대기합니다.
void run (): 이 thread가 별개의 Runnable 실행 객체를 사용해 작성되었을 경우, 그 Runnable 객체의 run 메서드가 호출됩니다.
void suspend (), void resume ()
사용 방법
(1) Thread 클래스 상속을 사용하여 Thread 정의
Thread_Class extends Thread {}
-> new Thread_Class; creation of thread object
-> start(); start of thread object
-> run() { … } : define what the thread object will do
(2) Runnable 인터페이스 사용
현재 클래스가 이미 다른 클래스에서 상속 된 경우 주로 사용합니다.
다중 상속의 경우 'Runnable 인터페이스 구현'사용
Thread_Class extends Other_class implements Runnable { …
-> new Thread_Class; creation of thread object
-> start(); : start of thread object
-> run() { … } : define what the thread object will do
(1) Thread Using Method
Thread를 상속받았기 때문에 사용할 때 바로 Thread를 생성시킨다.
① Thread 클래스를 상속하여 Thread를 정의합니다.
② Runnable 클래스에 정의 된 run () 메서드를 구현합니다.
③ 다른 클래스에서 Thread 클래스를 만들고 시작합니다.
(2) Runnable interface Using Method
객체를 생성 후, new Thread를 통해 Thread를 생성해주어야 한다.
run()
을 바꿀 수 있다는 장점이 있다.① Runnable 클래스를 상속하여 RunnableThread를 정의합니다.
② Runnable 인터페이스에 정의 된 run() 메서드를 구현합니다.
③ 다른 클래스에서 Thread 클래스를 만들고 시작합니다.
sleep()
사용 시, 스레드가 랜덤으로 실행되는 것을 볼 수 있다.
Thread 종료 방법
(1) run() 메소드가 끝나면 , 자동으로 종료하는 방법 (자체적인 종료)
(2) 무한 반복에서 쓰레드를 종료하는 방법 (타 Thread 의 도움)
① 반복문의 조건문 이용
while(stop == false) { … }
② 반복문 내에 if의 조건문 사용
while(true ) { …;
if(Thread.isInterrupted ) break;
}
① Timer 기능을 활용하여 InterruptException 유발 : thread.interrupt
② 후에 , isInterrupted () 또는 interrupted() 로 확인 및 종료
(4) Stop() 은 사용안함
insert ‘thread stop condition’ in run() method of Lab3
Dal을 자동차 프로그램 처럼 종료 조건을 주는 것이 숙제
while문의 조건을 true
에서 x < 300
으로 변경
에러 종류 InterrruptedException
으로 변경
스레드의 동시 처리
Temporary stop of thread
suspend (): 잠시 정지
resume (): 다시 재생
스레드의 상호 배제
동시 처리를 위한 모니터 개념
Synchronized keyword in Java
Term Project 내에 Thread 기능을 구현 할 것
혹시 , Team 중심의 Term Project 내에 Thread 기능의 구현이 힘든 경우에는 개인별 Thread 기능을 구현하여 제출하여도 됨
개인별 Thread 기능의 구현 제출은 13 주 과제 요약 제출 시에 제출하시면 됨