- 여러 개의 작업이 동시에 수행되도록 하기 위해서는 한정된 코어의 수를 갖는 CPU를 여러 개의 작업이 나눠 사용 해야함
1. 프로그램과 프로세스 개념
- 컴퓨터 주요 구성 요소
- >중앙처리장치(CPU) , 메모리(Memory), 하드 디스크(Hard disk)
- >CPU는 연산을 수행함으로써 실제 프로그램을 실행하는 장치로, 가장 빠른 속도
- >하드 디스크는 데이터의 저장역할을 수행, 가장 낮은 속도
- >속도
CPU > 메모리 > 하드 디스크
- >실제 하드디스크에 저장된 프로그램(program)을 실행되기 위해서는 프로그램을 메모리로 로딩(loading)하여 프로세스(process)상태로 만들어야 함
- > 로딩된 메모리의 프로세스가 CPU와 비슷한 속도로 대화하면서 프로그램을 실행
- 프로그램
- > 하드디스크에 저장된 파일들의 모임
- 프로세스
- > 메모리상에 로딩된 프로그램
- 메모리는 프로그램 전체를 한꺼번에 로딩하는 것이 아니라 그때그떄 필요한 부분만을 동적으로 로딩
- 멀티프로세스
- > 동일한 프로그램을 메모리에 2번 로딩하면 2개 프로세스가 동작
- 프로그램과 프로세스의 관계
2. 쓰레드의 개념
- CPU는 속도 차이의 문제로 메모리의 프로스세와만 대화
- 프로세스만 CPU 사용 가능
- 실제 CPU를 사용하는 것은 프로세스 내부의 쓰레드
- 쓰레드
- > CPU를 사용하는 최소 단위
3. 자바 프로그램에서의 쓰레드
- 자바로 작성한 프로그램을 실행하면 메모리로 로딩돼 프로세스 상태가 됨
- .class 파일을 실행하면 자바 가상 머신은 main 쓰레드르 생성
- 프로그램이 처음 실행되면 시작 시점에서는 main 쓰레드 1개만이 존재
- main() 메서드에서 작성한 내용이 바로 이 main 쓰레드에서 동작
- main 쓰레드 내부에서 2개의 쓰레드를 생성해 실행하면 동시에 2개 이상의 쓰레드가 존재 -> 멀티 쓰레드 프로세스
4. 멀티 쓰레드의 필요성
- 멀티 쓰레드는 2개 이상의 쓰레드가 동시에 CPU를 사용함
- 비디오 프레임과 자막을 단일 쓰레드로 출력
package Thread;
public class Thread {
public static void main(String[] args) {
//비디오 프레임 1~5
int[] intArray = {1,2,3,4,5};
//자막 번호 하나~다섯
String[]strArray = {"하나","둘","셋","넷","다섯"};
//비디오 프레임 출력
for(int i = 0; i <intArray.length; i++) {
System.out.println("(비디오 프레임)"+intArray[i]);
try {Thread.sleep(200));}catch(InterruptedException e) {}
}
//자막 번호 출력
for(int i =0; i < strArray.length; i++) {
System.out.println("(자막번호)"+strArray[i]);
try {Thread.sleep(200);}catch(InterruptedException e) {}
}
}
}
- 비디오 프레임 번호가 모두 출력된 후 자막 번호 출력
5. 쓰레드는 정말 동시에 수행될까?
- 단일 쓰레드로 2개의 작업을 처리할 때 각 작업은 순차적(sequential)로 처리
- 멀티 쓰레드에서는 동시성(Concurrency)와 병렬성(Parallelsim)을 갖고 처리
1) 동시성
- 처리할 작업 수 > CPU 코어 수
ex) CPU의 코어는 1개인데, 동시에 처리해야 할 작업이 2개일때
- CPU는 각 작업 쓰레드의 요청 작업을 번갈아가면서 실행
- 매우 짧은 간격으로 교차 실행하기 때문에 사용자는 두 작업이 마치 동시에 실행되는 것 처럼 보임
2) 병렬성
- CPU 코어의 수 > 처리할 작업 수
- 각각의 작업을 각각의 코어에 할당해 동시에 실행할 수 있기 때문에 동시에 작업이 수행
ex) CPU 코어의 수 4개, 해야할 작업의수 3개라면 각각의 작업을 각각의 코어에서 실행하는 쓰레드 병렬성 적용
- 작업 수가 6개 , 코어가 2개 라면?
-> 쓰레드의 동시성과 병렬성이 함께 적용
-> 먼저 작업이 2개의 코어에 나뉘어 할당되고 (병렬성), 각각의 코어는 할당된 작업을 번갈아 실행(동시성)
'Java' 카테고리의 다른 글
15 - 3장 쓰레드의 속성 (0) | 2023.06.14 |
---|---|
15 -2장 쓰레드의 생성 및 실행 (0) | 2023.06.14 |
14 - 4장 사용자 정의 예외 클래스 (0) | 2023.06.13 |
14 - 3장 예외 전가 (0) | 2023.06.13 |
14 - 2장 예외 처리 (0) | 2023.06.13 |