목차
- 프로세스 vs 스레드
1-1. 프로세스
1-2. 스레드
- 멀티프로세스 vs 멀티스레드
2-1. 멀티프로세스
2-2. 멀티스레드
- 결론
1. 프로세스 vs 스레드
- 프로세스는 독립적인 실행환경을 가지고 있는 프로그램의 인스턴스를 의미하고, 쓰레드는 프로세스 내에서 실행되는 실행단위이다.
1. 프로세스
프로그램을 실행 시켜 동적으로 프로그램이 돌아가고 있는 상태를 말한다. 작업 중인 프로그램을 의미한다.
흔히 우리가 컴퓨터를 사용할때 사용했던 작업관리자를 보면 실행중인 프로그램(프로세스)를 확인 할 수 있으며 작업 끝내기를 눌러 실행중인 프로세스를 끝내는 경우가 있었을 것이다.
즉, 프로세스는 메모리에 적재되고 CPU자원을 할당받아 프로그램이 실행되고 있는 상태를 말한다.
프로그램을 실행하면 프로세스가 만들어지면서 메모리 영역으로 구성되어 위와 같이 할당 받게 되는 것이다.
2. 스레드
하나의 프로세스 내에서 동시에 진행되는 실행단위
일반적으로, 하나의 프로세스는 반드시 하나 이상의 스레드를 가진다.
크롬 브라우저를 실행시키면 프로세스 하나를 실행시키는 것과 같고 크롬을 이용해 우리는 음악도 듣고 파일도 다운 받으며 웹검색을 한다.
스레드끼리 프로세스 자원을 공유하면서 프로세스 실행 흐름의 일부가 되기에 동시 작업이 가능하다. 그래서 하나의 프로세스 내에 여러개의 스레드가 들어있는 상태가 될 수 있다.
각각의 스레드는 4가지 메모리 영역(Code, Data, Heap, Stack)중 Stack만 할당받아 복사하고 나머지는 프로세스 내에 다른 스레드들과 공유된다.
2. 멀티프로스세스 vs 멀티스레드
- 멀티 프로세스와 멀티 스레드는 한 어플리케이션에 대한 작업 처리방식이다.
1. 멀티프로세스
- 운영체제에서 하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 기술
부모프로세스와 자식프로세스는 각각 고유한 PID(Process ID)를 가지고 있어 서로 통신이 가능하다.
통신이 가능하지만, 서로 다른 프로세스로 독립적으로 실행되며, 독립적인 메모리 공간을 가지고 있어 서로 다른 작업 수행이 가능하다.
대표적으로 웹 브라우저의 상단 탭을 여러개 띄어 실행하는 것과 같다.
1-1. 멀티프로세스 장점
- 프로그램 안정성
멀티 프로세스는 각 프로세스가 독립적인 메모리 공간을 가지므로, 한 프로세스가 비정상적으로 종료되어도 다른 프로세스에 영향을 주지 않는다. 그래서 프로그램 전체의 안전성을 확보할 수 있다.
- 시스템 확장성
각 프로세스가 독립적이므로, 새로운 기능이나 모듈을 추가하거나 수정할때 다른 프로세스에 영향을 주지 않는다. 그래서 시스템의 규모를 쉽게 확장할 수 있다.
1-2. 멀티프로세스 단점
- Context Switching Overhead
CPU는 다음 프로세스의 정보를 불러오기 위해 메모리를 검색하고, CPU 캐시 메모리를 초기화하며, 프로세스 상태를 저장하고, 불러올 데이터를 준비해야 하기 때문에, 이로 인한 빈번한 Context Switching 작업은 비용이 크다.
- 자원 공유 비효율성
각 프로세스가 독립적인 메모리 공간을 가지므로, 결과적으로 메모리 사용량이 증가하게 된다.
2. 멀티스레드
- 멀티스레드는 하나의 프로세스 내에서 여러개의 스레드를 생성해 동시에 실행하는 방식.
- 하나의 프로그램에서 두가지 이상의 동작을 동시에 처리하도록 하는 행위가 가능하다.
멀티 스레드는 웹 브라우저의 단일 탭 또는 창 내에서 브라우저 이벤트 루프, 네트워크 처리, I/O 및 기타 작업을 관리하고 처리하는데 사용된다
2-1. 멀티스레드 장점
- Context Switching Overhead
멀티 스레드에도 컨텍스트 스위칭 오버헤드가 존재하지만 프로세스의 컨텍스트 스위치 오버헤드보다 훨씬 비용이 낮다.
멀티 스레드 컨텍스트 스위칭 비용은 스위칭할 때 스레드 간에 공유하는 자원을 제외한 스레드 정보(stack, register)만을 교체하면 되므로 프로세스 컨텍스트 스위칭 비용보다 상대적으로 낮다.
- 자원의 효율성
멀티 스레드는 하나의 프로세스 내에서 여러 개의 스레드를 생성되기 때문에, heap 영역과 같은 공유 메모리에 대해 스레드 간에 자원을 공유가 가능하다.
2-2. 멀티스레드 단점
- 안정성 문제
멀티 스레드 환경에서 하나의 스레드가 문제가 되면 다른 스레드들도 영향을 받아 하나의 프로세스 전체가 종료될 수 있다.
- 동기화로 인한 성능 저하
여러 개의 스레드가 공유 자원에 동시에 접근할 수 있기 때문에, 동기화 문제가 발생할 수 있다.
3. 결론
- 실행방식
- 멀티프로세스는 여러 개의 독립적인 프로세스를 동시에 실행하는 방식.
- 멀티스레드는 하나의 프로세스 내에서 여러개의 스레드를 생성해 동시에 실행하는 방식.
- Context Switching Overhead
- 멀티프로세스는 컨텍스트 스위칭이 일어날때마다 CPU에서 다음 프로세스의 정보를 불러오기 위해 메모리를 검색하고, CPU 캐시 메모리를 초기화하며, 프로세스 상태를 저장하고, 불러올 데이터를 준비해야 하기 때문에 비용이 큼.
- 멀티스레드의 컨텍스트 스위칭 비용은 스위칭할 때 스레드 간에 공유하는 자원을 제외한 스레드 정보(stack, register)만을 교체하면 되므로 프로세스 컨텍스트 스위칭 비용보다 상대적으로 낮음.
- 메모리
- 멀티프로세스는 각 프로세스가 독립적인 메모리 공간을 할당 받음.
- 멀티스레드는 모든 스레드는 같은 메모리 공간을 공유.
- 안정성
- 멀티프로세스는 하나의 프로세스에 문제가 발생하더라고 다른 프로세스에 영향을 주지 않음.
- 멀티스레드는 하나의 스레드에서 문제가 발생하면 해당 프로세스의 모든 스레드가 종료될 수 있음.
참고
'Java & Kotlin' 카테고리의 다른 글
프록시패턴(Proxy Pattern)이란? (0) | 2023.11.22 |
---|---|
어댑터패턴(Adapter Pattern)이란? (0) | 2023.11.21 |
__GC 방식에는 어떤 것들이 있을까?__ (0) | 2023.05.04 |
GC**(GarbageCollection)**는 어떻게 동작하며 왜 필요할까? (0) | 2023.05.02 |
Hashmap vs Hashtable vs __**ConcurrentHashMap**__ (0) | 2023.04.20 |