본문 바로가기

백엔드 기술/Java

Multi-Thread & Multi Process

우선 #멀티 쓰레드와 #멀티 프로세스에 대해 알아보자.

#멀티 쓰레드 (Multi Thread)
하나의 프로세스에서 여러 개의 스레드를 사용해 작업을 하도록 해주는 기능이며
각 쓰레드자신이 속한 하나의 프로세스의 메모리를 공유하며 실행된다.

#멀티 프로세스 (Multi Process)
여러 개의 CPU의 코어를 사용하여 여러 개의 프로세스를 동시에 수행하는 것을 의미하며,
각 프로세스 독립적인 메모리를 가지고 별도로 실행된다.

그림과 같이 하나의 프로세스 안여러 개의 스레드가 존재한다.

[쓰레드]

프로세스 내에 작업을 수행하는 흐름.

[싱글 스레드 (Single Thread)]

하나의 프로세스 내에서 하나의 스레드를 이용하여 한 번에 한 작업만 수행하는 것. 

[멀티 쓰레드]

하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것.
프로세스 내의 스레드는 모두 각각 독립적인 실행 파일이며, 모든 스레드는 프로세스의 일부이다.

[장점]

1. 프로세스 생성많은 시간과 자원을 소비한다. 

2. 멀티 스레드에서 스레드 간 Stack Area만 비공유하고, PC Register, Heap Area를 공유한다.


3. 스레드의 생성 및 Context Switching프로세스의 생성 및 Context Switchin 보다 빠르다.

*Context Switching
컴퓨터에서 동시에 처리할 수 있는 최대 작업의 수는 CPU의 코어(core) 수와 같다.
만약 CPU의 코어 수보다 더 많은 스레드가 실행되면,
각 코어가 정해진 시간 동안 여러 작업을 번갈아가며 수행을 한다.
이때 각 스레드가 서로 교체될 때, 스레드 간의 Context Switching이 발생한다.
이러한 Context Switching에 걸리는 시간이 커질수록, 멀티 스레딩의 효율은 저하된다.


4. 각 스레드자신이 속한 하나의 프로세스의 메모리를 공유하여, 시스템 자원의 낭비가 적다.

5. 하나의 스레드가 작업을 할 때, 다른 스레드가 별도의 작업을 할 수 있다.

 

[요약]

#멀티 스레드
1. 하나의 프로세스에서 여러 개의 스레드를 사용해 여러 작업을 병렬적으로(=동시에) 수행하는 것.
2. 각 스레드는 자기가 속한 하나의 프로세스 메모리를 공유.

#멀티 프로세스
1. 여러 개의 CPU 코어를 사용하여 여러 개의 프로세스를 사용해 작업을 수행하는 것.
2. 각 프로세스는 독립적인 메모리를 사용.




'백엔드 기술 > Java' 카테고리의 다른 글

얕은 복사 VS 깊은 복사  (0) 2023.04.27
Optional<T> 클래스란 ?  (0) 2023.04.21
SingleTon 디자인 패턴  (0) 2023.04.20
컴파일(Compile)과 런타임(Runtime)  (0) 2023.04.20
Java - Generic 제네릭이란 ?  (0) 2023.04.20