우선 #멀티 쓰레드와 #멀티 프로세스에 대해 알아보자.
#멀티 쓰레드 (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 |