멀티 프로세스와 멀티 스레드
- 멀티 프로세스 : 하나의 운영체제 안에서 여러 프로세스가 동시에 실행되는 것
- 멀티 스레드 : 하나의 프로세스 안에서 여러 스레드를 사용하여 동시에 처리하는 것
참고 : 동시에 처리하는 것은 사실 빠르게 Context-Switching하는 것이고, 그 속도가 빠르기에 사용자는 동시에 여러 일을 처리한다고 느낀다. ( CPU는 한번에 하나의 프로세스만 실행 가능하다.)
동시성과 병렬성
멀티 프로세스 대신에 멀티 스레드를 사용하는 이유?
-
메모리 측면 : 자원을 효율적으로 사용하기 위해
멀티 프로세스의 경우 프로세스를 생성하여 자원을 할당하는 시스템 콜을 할 때마다 오버헤드가 크지만, 멀티 스레드는 메모리 영역을 공유하기 때문에 시스템 자원을 효율적으로 사용할 수 있다.
-
속도 측면 : Context-Switching 비용을 줄이고 응답 속도를 빠르게 하기 위해
메모리 영역을 공유하기 때문에 Context-Switching과 스레드 간의 통신 시 Stack 영역만 처리하기에 통신 비용이 적고 응답속도가 빠르다.
멀티스레드
- 장점
- 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
- 스레드 간 통신 비용이 적고 응답 시간이 빠르다.
- 단점
- 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
- 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수 있다.
용어 정리
- 멀티 프로그래밍 : 프로세서가 한 프로세스의 처리를 대기 중일 때, 효율성을 위해서 프로세서를 idle 상태로 두지 않고 다른 프로세스를 처리하는 방식 - 프로세서의 자원낭비를 막기 위함
- 멀티 태스킹 : 하나의 운영체제 안에서 여러 테스크를 병렬 처리하는 방식
(테스크는 프로세스보다 확장된 개념으로, OS의 작업 단위를 뜻한다)
- 멀티 프로세싱 : 여러 프로세서(CPU)가 일을 처리하는 방식(CPU가 여러개)
용어 정리