프로그램, 프로세스와 스레드에 대해 알아보고 어떤 공통점과 차이점이 있는지 정리
질문
- 프로그램이란?
- 프로세스의 특징
- 스레드의 특징
- 프로세스의 장점과 단점
- 스레드의 장점과 단점
- 프로세스와 스레드의 공통점과 차이점
- 멀티프로세스와 멀티스레드의 특징, 장단점
프로그램, 프로세스, 스레드
프로그램
- 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 모음
- 하드 디스크 등에 저장되어 있는 실행 코드
프로세스
- 컴퓨터에서 연속적으로 실행되고 있는 프로그램
- 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업 단위
스레드
- 프로세스 내에서 실행되는 흐름의 단위
- 한 프로그램은 하나 이상의 스레드를 가지며 둘 이상의 스레드를 동시에 실행 가능 (멀티스레드)
프로세스
프로세스의 특징
자원을 할당받는 작업의 단위
- 운영체제로부터 시스템 자원(CPU 시간, 주소 공간, 메모리 등)을 할당받아 작업 수행
독립된 메모리 공간
- 운영체제로부터 독립된 메모리 영역(Code, Data, Heap, Stack)을 할당받아 실행
- 프로세스당 최소 1개의 스레드(메인 스레드)를 가짐
독립성
- 각 프로세스는 별도의 주소 공간에서 실행
- 다른 프로세스의 메모리에 직접 접근 불가
- 파이프, 파일, 소켓 등을 이용한 프로세스 간 통신(Inter-Process Communication, IPC)을 사용해 다른 프로세스와 데이터 통신
프로세스의 장점
- 독립된 메모리 공간을 가지므로 하나의 프로세스에 문제가 발생하더라도 다른 프로세스에 영향을 주지 않음
프로세스의 단점
- 프로세스 간 통신은 IPC 기법을 사용해야 하며, 컨텍스트 스위칭 시 오버헤드가 발생하여 시스템 자원 소모가 큼
스레드
스레드의 특징
프로세스 내 실행 흐름 단위
- 스레드는 프로세스 내에서 실행되는 작업의 흐름
- 프로세스가 할당받은 자원을 공유하며 실행됨
메모리 공유
- 같은 프로세스 내의 스레드들은 Code, Data, Heap 영역을 공유
- 각 스레드는 독립적인 레지스터, Stack을 가짐
- 이를 통해 스레드 간 데이터 공유와 통신이 용이
빠른 생성 및 전환
- 스레드는 프로세스 내에서 생성되므로, 프로세스 간 전환보다 스레드 간 전환이 더 빠르고 효율적
스레드의 장점
- 같은 프로세스 내에서 메모리를 공유하므로 통신이 빠르고 효율적
- 스레드 간 컨텍스트 스위칭은 프로세스 간 전환보다 오버헤드가 적음
스레드의 단점
- 메모리를 공유하기 때문에 하나의 스레드에서 오류가 발생하면 같은 프로세스 내 다른 스레드에도 영향을 미칠 수 있음
- 동기화 문제로 인한 복잡성이 증가함
프로세스와 스레드의 차이점
메모리 구조
- 프로세스: 독립된 메모리 공간을 가짐
- 스레드: 프로세스 내에서 메모리를 공유
자원 공유
- 프로세스: 다른 프로세스의 메모리에 직접 접근 불가
- 스레드: 같은 프로세스 내에서 자원을 공유하며 실행
오버헤드
- 프로세스: 프로세스 간 컨텍스트 스위칭은 오버헤드가 큼
- 스레드: 스레드 간 전환은 상대적으로 오버헤드가 적음
멀티 프로세스, 멀티 스레드
멀티 프로세스
- 하나의 응용 프로그램을 여러 개의 프로세스로 구성
- 각 프로세스가 하나의 작업을 처리
- 여러 개의 자식 프로세스 중 하나에 문제가 발생해도 다른 자식 프로세스에 영향이 미치지 않음
- 컨텍스트 스위칭의 오버헤드가 큼
- IPC로 프로세스 간 통신의 어려움
멀티 스레드
- 하나의 응용 프로그램을 여러 개의 스레드로 구성
- 각 스레드가 하나의 작업을 처리
- 시스템 자원의 효율성과 처리량 증가
- 스레드 간 데이터 공유가 상대적으로 간단하기 때문에 부담이 적음
- 설계와 디버깅이 까다롭고 동기화 문제가 어려움
- 하나의 스레드에 문제가 발생하면 다른 스레드와 전체 프로세스도 영향을 받음