본문 바로가기

Java

15 - 1장 프로그램, 프로세스, 쓰레드

- 여러 개의 작업이 동시에 수행되도록 하기 위해서는 한정된 코어의 수를 갖는 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