Process(프로세스)와 Thread(쓰레드)의 개념 & 차이
- 개발자라면?/OS 개념
- 2022. 9. 16.
Process (프로세스)
의미
- Program이 실행 후 작동하고 있는 상태일 때, 컴퓨터에서 연속적으로 실행되고 있는 '동적인 상태'의 Program
- Program을 실행하면 OS가 메모리 등 필요한 자원을 할당해주어 "Process"가 된다
- 할당받는 System resource의 예
- 독립된 메모리 영역 - Code, Data, Stack, Hack 구조
- 운영에 필요한 주소 영역
- CPU 시간
- 할당받는 System resource의 예
- Windows 작업관리창에 표시되어 있는 Program들 (실행 중)
특징
- 독립된 메모리 영역 할당 - Code, Data, Stack, Hack 구조
- 각 Process 는 별도의 주소 영역에서 실행되며, 독자적인 메모리 영역을 갖기 때문에 Process 간 메모리 영역의 공유는 불가
- 다른 Process 의 자원에 접근하려면 IPC (Inter-Process Communication) 을 사용해야 함
- Process 는 최소 1개의 Thread 를 포함하고 있다
Multi Processing
의미
- 하나의 Program 을 여러 개의 Process 로 구성하여 각 Process 가 하나의 작업(Task)을 처리하도록 하는 것
특징
- 여러 Process 들을 한 꺼번에 동작시키는 작업은 동시성, 병렬성, 그리고 혼합을 통해 이뤄진다
- Concurrency (동시성)
- Processor (CPU) 하나가 여러 프로그램들의 여러 작업을 돌아가며 일부분씩 수행하는 방식
- Processor 는 한 번에 하나의 Process 만 실행시킬 수 있기 때문에 동시성을 통해 여러 작업을 동시에 수행하는 것처럼 동작하게 한다
이때, 진행 중인 작업을 바꾸는 것을 'Context Switching'이라 하며, 이 과정은 매우 빠르게 진행되므로 사람들은 여러 Process 들이 동시에 진행되는 것처럼 느낀다
- Parallelism (병렬성)
- Processor 하나에 여러 개의 Core (Multi-core) 있어 각 Core 들이 각기 다른 작업을 동시에 수행하는 방식이다
- Dual, Quad, Octa Core 와 같은 Multi-core 를 탑재한 PC 에서 가능한 방식
장점
- 여러 자식 Process 중 하나에 문제가 발생해도 그 자식 Process 가 죽는 것 외에 영향을 끼치지 않는다
단점
- 각 Process 는 별도의 주소 영역에서 실행되며, 독자적인 메모리 영역을 갖기 때문에 Process 간 메모리 영역의 공유는 불가
- 하나의 Program 에 속하는 Process 라도 변수를 공유할 수 없다
- Process 간 통신을 위해 IPC (Inter-Process Communication) 필요
- Process 간 공유하는 메모리가 없어 Context Switching 가 발생하면 캐시 메모리의 모든 데이터를 리셋하고 다시 불러와야 한다
- Context Switching 과정에서 캐시 메모리 초기화와 같은 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드 발생
Thread (쓰레드)
의미
- Process 가 할당 받은 자원을 이용하는 실행 단위
- Process 의 특정한 수행 경로이자 Process 내에서 실행되는 여러 흐름의 단위
- Process 는 최소 1개의 Thread 를 갖는데 이를 Main Thread 라 한다
- Thread 들이 모여 하나의 Process 를 구성한다
특징
- 각 Thread 는 독자적인 Stack 메모리를 갖는다
- Thread 는 Process 내에서 Code, Data, Heap 영역을 공유한다
- 각 Thread 는 별도의 레지스터와 Stack 을 갖고 있지만, Heap 메모리는 서로 읽고 쓸 수 있다
- 한 Thread 가 Process 자원을 변경하면, 다른 이웃 Thread (sibling thread)도 그 변경 결과를 즉시 볼 수 있다
- 메모리의 공유 때문에 동기화, 데드락 등의 문제가 발생할 수 있다
- Thread 는 대부분의 현대 OS 가 지원하고 있으며, 이와 관련된 주요 라이브러리는 POSIX Pthreads, Windows threads, Java threads 가 있다
Multi Thread
의미
- 하나의 응용 Program 을 여러 개의 Thread 로 구성하고 각 Thread 로 하여금 하나의 작업을 처리하도록 하는 것
- 윈도우, 리눅스 등 많은 OS 들이 Multi Processing 을 지원하고 있지만 Multi Threading을 기본으로 하고 있다
- 대표적인 멀티 스레드 응용 Program 은 웹 서버가 있다
장점
- 시스템 자원의 효율성
- Process 를 생성해 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다
- Thread 간 Data 를 주고 받는 것이 비교적 간단해 시스템 자원의 소모가 줄어든다
- Thread 간 작업량이 작아 Context Switching 이 빠르다
- 통신 방법이 간단해 Program 응답 시간 단축
- Thread 는 Process 내의 Stack 영역 외의 모든 메모리를 공유해 통신의 부담이 적다
단점
- 설계와 디버깅이 까다롭다
- 단일 Process 시스템의 경우 효과가 크지 않다
- 다른 Process 간에는 Thread 를 제어할 수 없다
- Multi Thread 의 경우 동기화, 데드락 등의 문제가 발생할 수 있다
- 하나의 Thread 에서 문제가 발생하면 전체 Process 에 영향을 준다
차이점
Process 와 Thread
관계
Process 는 Thread 의 컨테이너이다
즉, Process 는 Thread 에 필요한 자원과 정보를 제공하고 Thread 의 정보를 담고 있다
차이점
차이 | Process | Thread |
정의 | 실행 중인 Program | Process 의 기본 실행 단위 |
생성/종료 시간 | 많은 시간 소요 | 적은 시간 소요 |
Context Switching | 많은 시간 소요 | 많은 시간 소요 |
상호 통신 | IPC | 공유 메모리 |
자원 소모 | 많음 | 적음 |
독립성 | 각각 독립적 | Stack 만 독립적 |
Multi Proecss 와 Multi Thread
Multi Process 보다 Multi Thread 를 사용하는 이유는?
여러 프로그램을 실행하는 것보다 하나의 프로그램에서 여러 작업을 수행하는 것이 효율적이다
자원의 효율성 증대
- Multi Process 로 실행되는 작업을 Multi Thread 로 실행할 경우, Process 를 생성해 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다
- Thread 는 Process 내의 메모리를 공유하기 때문에 독립적인 Process 와 달리 Thread 간 Data 를 주고 받는 것이 간단해 시스템 자원의 모소가 줄어든다
처리비용 감소 및 응답시간 단축
- Process 간 통신인 IPC 보다 Thread 간 통신의 비용이 적어 작업 간의 통신 부담이 줄어든다
- Thread 는 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 Process 간의 전환 속도보다 Thread 간의 전환 속도가 빠르다. (Context Swtiching 시 Thread 는 Stack 영역만 처리하기 때문이다)
추가
Program (프로그램)
의미
- 어떤 작업을 하기 위해 할 일들을 순서대로 나열한 것
- Ex) 컴퓨터에서 어떤 작업을 위해 실행할 수 있는 '정적인 상태'의 파일 (.exe)
- 프로그램에 필요한 데이터를 묶어 놓은 파일로 보조 기억장치에 저장된다.
참고
https://velog.io/@gparkkii/ProgramProcessThread
https://cocoon1787.tistory.com/688
https://haedallog.tistory.com/138
'개발자라면? > OS 개념' 카테고리의 다른 글
Context Switching 이란? (0) | 2022.09.19 |
---|