1. 프로세스란?
•
프로세스(Process는 실행중인 프로그램을 뜻함
•
프로세스는 프로그램이 실행 될 때마다 개별적으로 생성
•
하나의 프로세스는 프로그램을 수행함에 있어 필요한 데이터, 메모리 등의 할당 받은 자원, 그리고 하나이상의 스레드 구성
2. 스레드
•
스레드(Thread)는 프로세스 내에서 할당 된 자원을 이용해 실제 작업을 수행하는 작업 단위
•
모든 프로세스는 하나 이상의 스레드를 가지며 각각 독립적인 작업단위를 지님
2-1 메인스레드, 프로세스종료
1.
메인 스레드
a.
모든 자바 프로그램은 메인 스레드가 main()메소드를 실행하며 시작
b.
Main()메소드의 첫 코드 부터 아래로 순차적으로 실행되고 return을 만나면 종료
c.
필요에 의해 작업 스레드들을 만들어서 병렬 코드를 실행(멀티스레드를 이용한 멀티태스킹)
2.
프로세스 종료
a.
싱글 스레드의 경우 메인 스레드가 종료되면 프로세스가 종료되지만
b.
멀티 스레드의 경우 실행중인 스레드가 하나라도 있다면 프로세스가 종료되지않는다.
2-2 멀티프로세스 vs 멀티 스레드
1.
멀티 프로세스 : 각각의 프로레스를 독립적으로 실행
2.
멀티 스레드 : 하나의 프로세스 내에서 여러스레드가 동시에 작업을 수행
2-3 싱글스레드와 멀티스레드
2-4 멀티스레드의 장단점
•
장점
1.
자원을 보다 효율적으로 사용 가능
2.
사용자에 대한 응답성 향상 ( 텍스트와 영상(사진)을 동시에 가능)
3.
애플리케이션의 응답성 향상
4.
작업이 분리되어 코드가 간결
5.
CPU 효율성 향상
•
단점
1.
동기화(Synchronization)에 주의→ 2개이상의 스레드가 하나의 자원을 공유해서 쓸 경우 한쪽에서 접근해서 사용할 때 예측하지못한 결과를 받아올수 있다 그래서 다른한쪽에서는 접근하지못하게 막는거를 의미한다.
a.
동기화 : 한번에 한개 스레드만 프로세스 공유 자원(인스턴스)에 접근할 수 있도록 락(Lock)을 걸어 다른 스레드가 진행중인 작업에 간섭하지 못하도로 막는것
2.
교착상태(dead-lock)가 발생하지 않도록 주의
3.
프로그래밍 시 고려해야 할 사항이 많음 → 스레스 사용시 작업우선순위가 있음(우선순위 지정할 때 크게 2가지 1.라운드로빈→ 프로그램레벨에서 건들일 수 없음, 2.우선순위할당방식→프로그램레벨에서 건드릴 수 있다.)
3. 스레드 생성방법(2가지)
ㅁㅇㅁ
•
스레드의 run()호출 시 스택에 쌓이는 방법
•
start()를 호출하면 run()은 하나의 새로운 스택을 만든
4. 스레드 스케쥴링
스레드 개수가 코어의 수보다 많을 경우 스레드를 어떤 순서로 동시성을 실행할 것인가를 결정하는 것, 스케쥴링에 의해 스레드를 번갈아 가며 run()메소드를 조금씩 실행
4-1 자바의 스레드 스케줄링 방식
1.
우선순위방식
2. 순환 할당 방식
4-2 스레드 컨트롤
◦
실행중인 스레드의 상태를 제어
◦
효율적이고 정교한 스케줄링을 위한 스레드 상태를 제어하는 기능
5. 데몬스레드
5-1 데몬스레드란?
다른 스레드 작업을 돕는 보조적인 역할을 수행하는 메소드, 데몬스레드 이외의 스레드들이 모두 종료되면 데몬스레드는 강제적으로 종료 ex) 가비지컬렉션, 워드프로세스에 자동저장, 화면자동갱신 등
5-2 데몬스레드 생성
◦
데몬스레드가 될 스레드의 레퍼런스 변수에 setDemon(true)를 호출하여 생성
◦
단, start() 메소드 호출 전에 setDemon(true)를 호출 → 그렇지 않으면 IllegalThreadStateException이 발생