프로그램의 성능을 향상시키는 방법 중 하나는 여러 작업을 동시에 처리하는 것이다. 이를 위해 멀티 프로세스와 멀티 쓰레드라는 두 가지 기술이 사용된다.
프로세스와 쓰레드란 무엇일까?
프로세스
- 운영 체제에 의해 관리되는 실행 단위.
- 자체 메모리 공간, CPU 시간, 시스템 자원을 가지고 독립적으로 실행된다.
- 프로그램 실행, 파일 시스템 접근, 네트워킹 등 다양한 작업을 수행한다.
쓰레드
- 하나의 프로세스 내에서 실행되는 흐름 단위.
- 공유된 메모리 공간을 사용하고 CPU 시간을 번갈아 사용하며, 운영 체제에 의해 스케줄링된다.
- 여러 작업을 동시에 처리하여 프로그램의 성능을 향상시킬 수 있다.
정리하면 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
멀티 프로세스와 멀티 쓰레드의 비교
구분 | 멀티 프로세스 | 멀티 쓰레드 |
실행 방식 | 여러 프로세스 동시 실행 | 하나의 프로세스 내에서 여러 쓰레드 동시 실행 |
메모리 공간 | 각 프로세스 별 독립적인 메모리 공간 | 공유된 메모리 공간 |
CPU 시간 | 각 프로세스 별 독립적인 CPU 시간 | 번갈아 가면서 CPU 시간 사용 |
시스템 자원 | 각 프로세스 별 독립적인 시스템 자원 | 공유된 시스템 자원 |
장점 | 높은 처리 능력, 안정성 향상 | 낮은 오버헤드, 빠른 컨텍스트 스위칭 |
단점 | 높은 오버헤드, 메모리 사용량 증가, 프로세스 관리 복잡 | 동기화 문제 발생 가능성, 안정성 감소 |
멀티 프로세스와 멀티 쓰레드의 작동 방식
멀티 프로세스
- 각 프로세스는 자체 메모리 공간, CPU 시간, 시스템 자원을 가지고 독립적으로 실행된다.
- 운영 체제는 여러 프로세스를 스케줄링하여 CPU 시간을 할당한다.
- 프로세스 간 통신은 IPC(Inter-Process Communication) 메커니즘을 사용한다.
멀티 쓰레드
- 여러 쓰레드는 공유된 메모리 공간을 사용하고 CPU 시간을 번갈아 사용한다.
- 운영 체제는 스케줄러를 사용하여 쓰레드를 실행한다.
- 쓰레드 간 통신은 공유 메모리, 동기화 메커니즘 등을 사용한다.
언제 사용해야 할까?
멀티 프로세스
상황 | 이유 |
CPU 집약적인 작업을 수행할 때 | 여러 프로세스가 동시에 실행되어 CPU를 최대한 활용할 수 있다. |
리소스 격리가 필요 할 때 | 각 프로세스는 자체 메모리를 가지고 있기 때문에 다른 프로세스의 영향을 받지 않는다. |
안정성 중요 할 때 | 한 프로세스가 충돌해도 다른 프로세스는 영향을 받지 않아 안정성을 높일 수 있다. |
- 웹 브라우저의 각 탭은 별도의 프로세스로 실행되어 웹 페이지 로딩 속도를 높이고 안정성을 향상 시킨다.
멀티 쓰레드
상황 | 이유 |
I/O 집약적인 작업을 수행할 때 | 여러 쓰레드가 동시에 I/O 작업을 수행하여 응답 시간을 단축할 수 있다. |
빠른 응답 시간이 필요할 때 | 컨텍스트 스위칭 오버헤드가 적기 때문에 빠르게 응답할 수 있다. |
낮은 오버헤드가 중요 | 프로세스 생성/종료보다 오버헤드가 낮다. |
- I/O 작업은 블로킹 작업이 많기 때문에 여러 쓰레드를 사용하여 병렬 처리할 수 있다.
728x90