[IT 기본] OS
프로세스(Process)와 스레드(Thread) 차이 (멀티 프로세스, 멀티 스레드)
프로그램
파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태이며, 어떠한 작업을 위해 실행할 수 있는 파일을 뜻합니다.
프로세스
프로그램이 메모리에 올라와 운영체제로부터 CPU를 할당받고 프로그램이 실행되고 있는 상태.즉, 일을 처리하는 일련의 과정을 뜻합니다.
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
- 메모리에서 올라와 실행되고 있는 프로그램 인스턴스
- 컴퓨터에서 연속적으로 실행되고 있는 프로그램
- 각 프로세스는 별도의 주소 공간에서 실행되고 프로세스끼리는 자원을 공유하지 않음
- 하나의 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신 필요 (IPC, inter-process communication) Ex. 메일 슬롯, 파이프, 소켓, 시그널, 공유 메모리
할당받는 시스템 자원
- Code, Data, Stack, Heap 구조로 되어있는 독립된 메모리 영역
- 주소 공간
- CPU 시간
스레드
프로세스 내에서 실행되는 흐름의 단위로, 프로세스 하나에 자원을 공유하면서 일련의 과정을 여러 개 동시에 실행 시 킬 수 있는 것을 말합니다.
- 하나의 프로세스 내의 주소 공간이나 자원들 공유
- 하나의 프로세스가 생성되면 하나의 스레드(메인 스레드)가 생성됨
- 하나의 프로세스는 여러 개의 스레드를 가질 수 있음
- 스레드는 프로세스 내에서 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유
멀티 프로세스와 멀티 스레드의 차이
멀티 프로세스
하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
- 여러 개의 자식 프로세스 중 하나에 문제가 발생해도 다른 자식 프로세스에 영향이 확산되지 않음
- 구현이 간단
- 각 프로세스들이 독립적으로 동작(자원이 서로 다르게 할당됨) 하기 때문에 안정적
- 멀티 스레드 보다 많은 메모리 공간과 CPU 시간을 차지
- 작업량이 많을수록 오버헤드가 발생하고 Context Switching으로 인한 성능 저하 우려
- 프로세스 간의 통신을 하기 위해서는 IPC를 통해야 함
멀티 스레드
하나의 응용 프로그램을 여러 개의 스레드로 구성하여 각 스레드가 하나의 작업을 처리하도록 하는 것
- 시스템의 자원과 처리 비용 감소(실행 속도 상승)
- Context Switching이 빠름(스레드는 Stack영역만 처리하면 되기 때문)
- 스레드 간의 자원(Code, Data, Heap)을 공유하고 있기 때문에 통신의 부담이 적어 응답 시간이 빠름
- 스레드가 개별로 유기적으로 움직이고 있기 때문에 프로그램 테스트, 디버깅이 어려움
- 스레드 간의 데이터 공유 시 동기화 문제 발생
- 하나의 스레드의 오류로 전체 프로세스에 문제 발생
- 너무 많은 스레드 사용은 오버헤드를 발생
댓글남기기