프로그램 ?
- 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않는 정적인 상태
어떤 작업을 위해 실행할 수 있는 파일
프로세스 ?
- 프로그램이 메모리에 올라와 운영체제로부터 CPU를 할당받고 프로그램이 실행되고 있는 상태
일을 처리하는 일련의 과정
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
- 메모리에서 올라와 실행되고 있는 프로그램
- 컴퓨터에서 연속적으로 실행되고 있는 프로그램
- 각 프로세스는 별도의 주소 공간에서 실행되고 프로세스끼리는 자원을 공유하지 않음
- 하나의 프로세스가 다른 프로세스의 자원에 접근 시 프로세스 간 통신이 필요 (소켓, 공유메모리)
프로세스가 할당받는 시스템 자원
- Code, Data, Stack, Heap 구조로 되어있는 독립된 메모리 영역
- 주소 공간
- CPU 시간
스레드 ?
- 프로세스 내에서 실행되는 흐름의 단위로, 프로세스 하나에 자원을 공유하면서
일련의 과정을 여러 개 동시에 실행시킬 수 있는 것
- 하나의 프로세스 내의 주소 공간이나 자원을 공유
- 하나의 프로세스가 생성되면 하나의 스레드가 생성됨
- 하나의 프로세스는 여러개의 스레드를 가질 수 있음
- 스레드는 프로세스 내에서 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유
멀티 프로세스와 멀티 스레드 차이
멀티 프로세스 ?
- 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
- 여러 개의 자식 프로세스 중 하나의 문제가 발생해도 다른 자식 프로세스에 영향이 확산되지 않음
- 각 프로세스들이 독릭접으로 동작(자원이 서로 다르게 할당) 하기 떄문에 안정적
- 멀티 스레드 보다 많은 메모리 공간과 CPU 시간을 차지
- 작업량이 많을 수록 오버헤드가 발생하고 Context Switching으로 인한 성능 저하 우려
- 프로세스 간의 통신을 하기 위해서는 IPC 를 통해야 함
멀티 스레드 ?
- 하나의 응용 프로그램을 여러 개의 스레드로 구성하여 각 스레드가 하나의 작업을 처리
- 시스템의 자원과 처리 비용감소(실행속도 상승)
- Context Switching 이 빠름(스레드는 Stack 영역만 처리)
- 스레드 간의 자원(Code, Data, Heap) 을 공유하고 있기에 통신의 부담이 적고 응답 시간이 빠름
- 스레드가 개별로 유기적으로 움직이고 있기 때문에 프로그램 테스트가 어려움
- 스레드 간의 데이터 공유 시 동기화 문제 발생
- 하나의 스레드의 오류로 전체 프로세스 문제 발생
- 너무 많은 스레드의 사용은 오버헤드 발생
Context Switching ?
- 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정
IPC(Inter-Process Communition) ?
- 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로
참고 블로그 https://cocoon1787.tistory.com/688
[OS] 프로세스(Process)와 스레드(Thread) 차이 (멀티 프로세스, 멀티 스레드)
신입 개발자 기술 면접을 볼 때 항상 나오는 단골 질문 사항입니다. 프로세스와 스레드의 차이를 알고 프로그램이 작동하는 방식에 대해서 잘 이해하고 있는지 묻기 위한 질문이며, 그만큼 중요
cocoon1787.tistory.com
'개발지식' 카테고리의 다른 글
WebServer, WAS 의 차이 (0) | 2022.06.09 |
---|---|
동기와 비동기 방식 / 블로킹과 논블로킹 (0) | 2022.05.30 |
TCP 와 UDP의 차이 (0) | 2022.05.25 |
GET 방식과 POST 방식 (0) | 2022.05.24 |
HTTP HTTPS 의 차이 (0) | 2022.05.24 |