멀티 프로세스 (Multi-Process), 멀티 스레드 (Multi-Thread)
프로세스(Process)
- 프로그램이 실행되어 메모리에 올라가 있는 상태, 이 상태를 프로세스라고 부른다.
- 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 다른 프로세스에 접근이 불가하다.
쓰레드(Thread)
- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.
차이점
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이다.
스레드는 할당 받은 자원을 이용하는 실행의 단위이고 프로세스 내에 여러개 생길 수 있다.
어플리케이션 하나가 프로세스이고, 그 안에서의 분기 처리가 스레드가 되는 셈이다.
멀티 프로세스 (Multi-Process)
하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업(task)를 처리하는 것이다.
- 장점 : 하나의 프로세스가 잘못 되어도 프로그램은 동작 함
- 단점 : context switching(CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정) 비용(동작중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고 대기 하고 있다가 다시 실행시 복구하는 시간) 발생
멀티 스레드 (Multi-Thread)
프로그램을 여러개의 쓰레드로 구성하고 각 쓰레드가 작업(task)를 처리하는 것
- 장점 : 시스템 자원 소모 감소, 처리 비용 감소(실행 속도 향상), 쓰레드간 자원 공유(stack 영역)
- 단점 : 디버깅 어려움, 동기화 이슈 발생, 하나의 쓰레드의 오류로 전체 프로세스에 문제 발생
왜 멀티 프로세스로 할 수 있는 작업들을 굳이 하나의 프로세스에서 스레드로 나눠가며 할까?
- 운영체제가 시스템 자원을 효율적으로 관리하기 위해 스레드를 사용한다.
- 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
- 또한, 프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업들 간 통신의 부담이 줄어든다. (처리비용 감소. 프로세스는 독립구조이기 때문)
그렇다면 무조건 멀티 스레드가 좋을까?
스레드를 활용하면 자원의 효율성이 증가하기도 하지만, 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제가 발생 할 수 있으므로 프로그래머의 주의가 필요하다.
'지식' 카테고리의 다른 글
데이터베이스 DB 정규화 역정규화 (0) | 2023.03.22 |
---|---|
HTTP와 HTTPS의 차이 다른점 (0) | 2023.03.22 |
OOP 객체지향 예제 예시 이해 의미 특징 (0) | 2023.03.22 |
싱글톤 singletone pattern 예제 예시 의미 특징 (0) | 2023.03.22 |
SVG 사이즈 타이틀 SVG란 SVG 정의 SVG 수정 (0) | 2023.03.22 |
댓글