프로세스와 멀티프로세스
프로세스 (Process)
프로세스는 실행 중인 프로그램의 인스턴스를 의미
운영체제로부터 시스템 자원을 할당받는 작업의 단위
운영체제는 각 프로세스에게 독립된 메모리 공간을 할당하며,
프로세스 간의 메모리 공간은 기본적으로 다른 프로세스와 격리
특징:
- 독립성: 각 프로세스는 독립적인 메모리 공간을 가지며, 다른 프로세스의 메모리에 직접 접근할 수 없음
- 상호작용: 프로세스 간의 통신은 주로 IPC(Inter-Process Communication) 메커니즘을 통해 이루어짐.
예를 들면, 파이프, 소켓, 메시지 큐 등 - 자원 할당: 운영체제는 각 프로세스에 CPU 시간, 메모리, 파일 디스크립터 등의 자원을 할당
- 오버헤드: 프로세스 간의 전환(context switch)에는 비교적 큰 오버헤드가 발생
멀티프로세스 (Multiprocessing)
멀티프로세스는 여러 개의 프로세스를 병렬로 실행하는 방식을 의미
이점:
- 안정성: 하나의 프로세스가 중단되더라도 다른 프로세스에 영향을 미치지 않음
- 병렬 처리: 멀티코어 CPU에서 프로세스들이 병렬로 실행될 수 있어 성능이 향상
단점:
- 높은 자원 소모: 각 프로세스는 독립적인 메모리 공간을 가지므로 메모리 사용량이 많아질 수 있음
- 복잡한 통신: 프로세스 간의 통신이 복잡하고, IPC 메커니즘을 사용해야 함
쓰레드와 멀티쓰레드
쓰레드 (Thread)
쓰레드는 프로세스 내에서 실행되는 경량 실행 단위
한 프로세스 내에서 동작되는 여러 실행의 흐름
하나의 프로세스는 여러 개의 쓰레드를 가질 수 있으며,
이들은 동일한 메모리 공간을 공유
쓰레드는 Code, Data, Heap 영역을 공유하고,
Stack 영역만 독립적으로 할당
각 쓰레드가 함수 호출과 관련된 정보를 독립적으로 관리할 필요가 있기 때문
스택은 LIFO (Last In, First Out) 구조로 되어 있어,
함수 호출과 리턴이 순차적으로 이루어짐
만약 스택 영역을 공유하게 되면
함수 호출과 리턴이 섞여서 프로그램의 흐름이 꼬일 수 있음
따라서 각 쓰레드는 자신만의 스택 영역을 가지게 됨
특징:
- 공유 메모리: 같은 프로세스 내의 쓰레드는 동일한 메모리 공간을 공유하여 데이터를 주고받음
- 경량성: 쓰레드는 프로세스보다 생성 및 전환 비용이 적음
- 동기화 필요: 공유 자원에 접근할 때는 동기화 메커니즘(예: 뮤텍스, 세마포어)을 사용하여 데이터 일관성을 유지
멀티쓰레드 (Multithreading)
멀티쓰레드는 하나의 프로세스 내에서 여러 개의 쓰레드를 병렬로 실행하는 방식
이점:
- 효율적인 자원 사용: 쓰레드들은 동일한 메모리 공간을 공유하므로 메모리 사용량이 줄어듬
- 빠른 전환: 쓰레드 간의 전환이 프로세스 간의 전환보다 빠름
- 병렬 처리: 멀티코어 CPU에서 쓰레드들이 병렬로 실행될 수 있어 성능이 향상
단점:
- 데이터 경합: 쓰레드 간의 자원 경합이 발생할 수 있으며, 이를 해결하기 위해 동기화 메커니즘을 사용해야 함
- 복잡한 디버깅: 동기화 문제 등으로 인해 디버깅이 어려울 수 있음
요약
- 프로세스는 독립적인 실행 단위로,
각 프로세스는 독립된 메모리 공간을 가짐
멀티프로세스는 여러 개의 프로세스를 병렬로 실행하여 성능을 향상시키지만,
높은 자원 소모와 복잡한 통신이 단점 - 쓰레드는 프로세스 내의 경량 실행 단위로, 동일한 메모리 공간을 공유
멀티쓰레드는 하나의 프로세스 내에서 여러 개의 쓰레드를 병렬로 실행하여
자원을 효율적으로 사용하고 빠른 전환을 가능하게 하지만,
데이터 경합 문제를 해결해야 함