프로그램을 실행하는 방식에는 동시성(Concurrency) 과 병렬성(Parallelism) 이 존재합니다. 각각의 개념을 이해하면 멀티태스킹 환경에서 효율적인 프로그래밍이 가능합니다.
동시성(Concurrency)
동시성은 싱글 코어(Single Core) 환경에서 여러 작업을 번갈아 가면서 처리하는 방식입니다.
CPU는 한 번에 하나의 작업만을 실행할 수 있기 때문에, 여러 작업을 일정 시간 동안 실행한 후 다른 작업으로 전환하는 방식으로 동시성을 구현합니다.
이러한 작업 전환 과정에서 콘텍스트 스위칭(Context Switching) 이 발생합니다. 이는 실행 중인 작업의 상태를 저장하고 새로운 작업의 상태를 복원하는 과정으로, 동시성 환경에서 필수적으로 수행됩니다.
병렬성(Parallelism)
병렬성은 멀티 코어(Multi Core) 환경에서 각 코어가 독립적으로 작업을 수행하는 방식입니다. 즉, 여러 개의 CPU가 동시에 각각의 작업을 처리하여 물리적으로 동시에 실행됩니다. 병렬 처리는 동시성과 달리 작업 전환이 필요하지 않으며, 다수의 연산을 동시에 수행하는 데 유리합니다.
멀티 프로세스 (Multi Process)
멀티 프로세스는 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 실행하는 방식입니다. 이를 통해 프로그램의 안정성을 높일 수 있습니다.
멀티 프로세스의 장점
- 한 프로세스가 오류로 인해 종료되더라도, 다른 프로세스에는 영향을 주지 않음
- 여러 프로세스로 나누어 실행하면 프로그램 전체가 중단될 위험이 낮아짐
멀티 프로세스의 단점
- 각 프로세스는 독립적인 메모리 공간을 할당받아야 하므로, 메모리 사용량이 증가
- CPU가 여러 프로세스를 번갈아 실행해야 하므로 콘텍스트 스위칭 오버헤드 가 발생
콘텍스트 스위칭과 오버헤드
CPU는 한 번에 하나의 프로세스만 실행할 수 있으므로, 여러 프로세스를 실행하려면 현재 실행 중인 프로세스를 저장하고 새로운 프로세스로 전환하는 콘텍스트 스위칭 작업이 필요합니다. 이 과정에서 추가적인 시간과 메모리가 소모되며, 이를 오버헤드(Overhead) 라고 합니다.
프로세스 간 통신 (IPC: Inter Process Communication)
멀티 프로세스 환경에서는 프로세스가 독립적인 메모리 공간을 가지므로, 서로 데이터를 주고받으려면 IPC(Inter Process Communication) 를 사용해야 합니다. 그러나 이는 직접 메모리를 공유하는 것보다 비효율적 입니다.
멀티 스레드 (Multi Thread)
멀티 스레드는 하나의 프로세스 내부에서 여러 개의 스레드를 생성하여 실행하는 방식입니다.
멀티 스레드의 장점
- 메모리 공간을 공유 하므로, 여러 개의 프로세스를 생성하는 것보다 메모리 사용량이 적음
- IPC 없이도 자원 공유가 가능 하므로, 멀티 프로세스보다 효율적
- 콘텍스트 스위칭 비용이 적음, 즉 오버헤드가 상대적으로 낮음
멀티 스레드의 단점
- 스레드 간 스택(Stack) 영역을 공유 하므로, 공유 자원 동기화 가 필수적
- 한 스레드에서 문제가 발생하면 전체 프로세스에 영향을 미칠 가능성이 있음
결론
동시성과 병렬성은 CPU의 작업 처리 방식에 따라 달라지며, 각각의 특징을 고려하여 적절한 방식으로 시스템을 설계해야 합니다.
- 멀티 프로세스 는 독립적인 실행 환경을 보장하지만, 메모리 사용량과 오버헤드가 증가합니다.
- 멀티 스레드 는 자원을 효율적으로 사용할 수 있지만, 동기화 문제가 발생할 가능성이 있습니다.
따라서 응용 프로그램의 특성과 목적에 따라 적절한 방식(멀티 프로세스 또는 멀티 스레드)을 선택하는 것이 중요합니다.
해당 글은 다음 도서의 내용을 참고하고 추가적인 정보를 기재한 글임을 밝힙니다.
이수진, ⌜기술면접대비 CS전공 핵심요약집⌟, (주)도서출판 길벗
'CS지식 > 운영체제' 카테고리의 다른 글
교착 상태(Deadlock)와 스레드 안전(Thread Safe) (0) | 2025.02.03 |
---|---|
프로세스 동기화 (0) | 2025.02.01 |
PCB(Process Control Block), 프로세스의 생성, 프로세스 상태도 (0) | 2025.01.30 |
프로세스, 메모리 구조 (0) | 2024.11.05 |
운영체제, 커널, 시스템 콜 (0) | 2024.11.05 |