충분히 쌓여가는
Process / Thread 본문
Process 프로세스
- 프로그램이 실행되면 프로세스 인스턴스 생성됨
- 인스턴스가 생성된다: 프로그램 실행에 필요한 내용이 컴퓨터 메모리(Ram)에 적재된다는 의미
프로세스와 프로그램 차이
프로그램 | 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램.exe | |
프로세스 | 메모리에 적재되고 CPU 지원을 할당받아 프로그램이 실행되고 있는 상태 |
멀티 프로세스
- 하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
멀티프로세스 특징
- 안정성이 좋음: 여러 개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않음
- 구현이 비교적 간단함
- 각 프로세스들이 독립적으로 동작하며 자원의 서로 다르게 할당됨
- 프로세스 간 통신을 하기 위해서는 IPC(Inter-Process Communication)를 통해야 함
- 메모리 사용량이 많음
- 스케쥴링에 따른 Context Switch이 많아지고, 성능 저하의 우려가 있음
더보기
프로세스 간 통신(Inter-Process Communication, IPC): 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로
Context Switch(Context Switching): 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때, 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)을 교체하는 작업
멀티 태스킹
- OS(Operating System)를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 행위
- 여러 응용 프로그램을 동시에 열고 작업 할 수 있음
- 하나의 PC에서 sns 하면서 노래를 듣거나 동시에 채팅을 할 수 있는 이유는 멀티 태스킹 때문에 가능함
영역 | 역할 | |
정적 영역 | Code area | 프로그래머가 작성한 프로그램이 코드 영역에 작성됨 |
Data area | 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있음 | |
동적 영역 | Stack area | 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할때 사용됨 |
Heap area | 동적으로 할당되는 데이터들을 위해 존재하는 공간 | |
정적 영역: 선언할 때 크기 결정됨 동적 영역: 프로세스가 실행되는 동안 크기가 변할 수 있음 |
- 서로 다른 프로세스간 메모리 공간 접근 허용 불가
- 프로세스간프로세스 간 서로 다른 자원에 접근할 경우 프로세스 간 통신 해야 함
더보기
그림에서는 여러 프로세스가 동시에 실행되고 관리되는 것처럼 보이지만, 사실 CPU는 한 번에 한 가지 명령어만 처리 가능
즉, 동시가 아닌 재빠르게 프로세스들을 번갈아가며 실행하고, 관리하는 것
CPU는 상상이상으로 빠르기 때문에, 프로세스들을 번갈아가며 실행하고 관리하는 것이 마치 동시에 하는 것처럼 보임
Thread 스레드
- 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
- 하나의 애플리케이션(프로그램)은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 가짐
- 프로세스를 생성하면 기본적으로 하나의 (메인) 스레드 생성됨
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유
- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유
- 하지만 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없음
- 한 스레드가 프로세스 자원을 변경 -> 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있음
프로세스는 자원 공유 하지 않고, 스레드는 자원 공유함
멀티 스레드
- 하나의 애플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것
- 멀티 스레드 사용 이유: 사용자와 상호작용하는 애플리케이션에서 단일 스레드로 Network 또는 DB와 같은 긴 작업(Long-running task)을 수행하는 경우, 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문
멀티스레드 특징
- 응답성 좋음: 프로그램의 일부분(자식 스레드)이 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속적으로 수행됨
- 자원 공유가 쉬움: 스레드들은 부모 프로세스의 자원과 메모리를 공유할 수 있음
- 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적게 듬
- 멀티프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있음
- 구현 및 테스트, 디버깅이 어려움
- 너무 많은 스레드 사용은 오버헤드를 발생시킴
- 동기화 그리고 교착상태가 발생하지 않도록 주의해야 함
- 자식 스레드 중 하나에 문제가 생긴 경우 전체 프로세스에 영향을 줄 수 있음
멀티 프로세스/ 멀티 스레드
종류 | 장점 | 단점 |
멀티 프로세스 | 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않음 | - 각각 독립된 메모리 영역을 갖고 있어 작업량이 많을 수록 오버헤드가 발생 - Context SwitchingVisit Website으로 인한 성능 저하를 유발 |
멀티 스레드 | - 프로세스의 응답시간이 단축되고 시스템의 처리율이 향상됨 - 코드 영역과 데이터 영역을 공유하기 떄문에 자원 소모가 적음 |
- 프로그램 디버깅이 어려움 - 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 끼치게 됨 |
멀티 스레드가 멀티 프로세스에 비교했을 때의 이점과 위험 부담
자원 효율성 증대 | - 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우 프로세스를 생성하여 자원 할당하는 비용이 적음 - 스레드는 프로세스 내의 메모리를 공유하기 때문에 독립적인 프로세스와 달리 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어듬 |
응답 시간 단축 및 처리비용 감소 | - 프로세스간 IPC를 사용하여 통신하는 것은 상대적으로 비용이 큼 - 스레드는 프로세스의 메모리 영역을 공유하여 스레드 간의 통신 비용이 적게 듬 - 프로세스간의 Context Switching은 느린 반면 스레드간의 Context Switching 은 빠름(Context Switching 시 스레드는 Stack 영역만 처리하면 되기 때문) |
멀티 스레드의 안정성 문제 | - 여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하면서 이들을 수정한다는 점에 필연적으로 생기는 문제 - 멀티 프로세스의 프로그램은 문제가 생기면 해당 프로세스가 중단되거나 중단 시키고 다시 시작 하면됨 - 멀티 스레드 방식의 프로그램에서는 하나의 스레드가 자신이 사용하던 데이터 공간을 망가뜨린다면, 해당 데이터 공간을 공유하는 모든 스레드를 망가뜨릴 수 있음 |
더보기
Critical Section: 임계 구역 또는 공유변수 영역은 둘 이상의 스레드가 동시에 접근해서는 안 되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부 의미
참고 자료
Inpa Dev, 👩💻 프로세스 vs 쓰레드 차이 정리
'IT > Computer Science' 카테고리의 다른 글
RDBMS / NoSQL (0) | 2023.01.20 |
---|---|
네이티브 앱 / 웹앱 / 하이브리드 앱 (0) | 2023.01.19 |
ORM (2) | 2023.01.17 |
추상 클래스 / 인터페이스 (0) | 2023.01.16 |
Git / GitHub (1) | 2023.01.13 |