Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

Process / Thread 본문

IT/Computer Science

Process / Thread

빌드이너프 2023. 1. 18. 10:57

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