멀티프로세싱,스레딩,태스킹,프로그래밍
멀티 프로세싱(Multi-processing)
두개 이상, 다수의 프로세서가 협력적으로 작업을 동시에 처리하는 것
그림을 보면 아시겠지만, 각 각 프로세서 하나의 작업만을 처리하는 것이 아니라 다수의 작업을 처리하며, 하나의 작업이 하나의 프로세서로 처리되는 것이 아니라 다수의 프로세서에 의해 처리됩니다.
멀티 프로세싱 장점
- 여러 개의 자식 프로세스 중 하나의 문제가 발생하면 그 자식 프로세스만 죽는 것
멀티 프로세싱 단점
- Context Switching 오버헤드(어떤 처리를 하기 위해 들어가는 간접적인 처리 시간,메모리 등을 말함)
- Context Switcing과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다.
- 프로세스는 각 각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching이 발생하면 캐쉬에 있는 모든 데이터를 전부 리셋하고 다시 캐쉬정보를 불러와야 한다.
- 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.
멀티 스레딩(Multi threading)
하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것
하나의 프로세스내에는 여러개의 스레드가 존재하게 됩니다. 웹 서버는 대표적인 멀티 스레드 응용프로그램입니다. 윈도우, 리눅스 등 많은 운영체제들이 멀티 스레딩을 기본으로 멀티프로세싱을 지원합니다.
멀티 스레딩 장점
- 시스템 자원 소모 감소(자원의 효율성 증대)
- 시스템콜이 줄어들어 자원을 효율적으로 관리할 수 있음
- 시스템 처리량 증가(처리 비용 감소)
- 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 자원 소모가 줄어듬
- 스레드 사이의 작업량이 작아 Context Switching이 빠름
- 스레드는 프로세스 내의 Stack영역을 제외한 모든 메모리를 공유하기 때문에 부담이 적음
멀티 스레딩 단점
- 설계 / 디버깅이 까다로움
- 단일 프로세스 시스템의 경우 효과를 기대하기 어려움
- 자원을 공유하므로 동기화문제 발생(이러한 문제를 대비하기 위해 Critical Section기법을 사용)
- 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음
멀티스레드 vs 멀티프로세스
멀티프로세스 대신 멀티 스레드를 사용하는 이유
- 프로그램을 여러 개 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것
멀티 프로세스로 할 수 있는 작업을 멀티 쓰레딩으로 하는 이유
- 프로세스간의 Context Switcing시 오버헤드가 큼
- 스레드는 프로세스내의 메모리를 공유하기 때문에 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원소모가 줄어듬
- 프로세스를 생성하여 자원을 할당하는 시스템콜이 줄어들어 자원을 효율적으로 관리할 수 있음
멀티 태스킹
다수의 Task를 운영체제의 스케줄링에 의해 번갈아 가면서 수행하는 것”
프로세스가 각 각의 Task를 조금씩 자주 번갈아가면서 처리하기 때문에 사용자는 마치 동시에 여러 Task가 수행하는 것처럼 보이게 됩니다. 멀티태스킹은 일정하게 정해진 시간동안 번갈아가면서 각 각의 Task를 처리하는 것입니다.
멀티 프로그래밍
특정 프로세스가 작업을 처리할 때 낭비되는 시간동안 다른 프로세스를 처리하도록 하는 것
예를 들어, A라는 프로세스를 처리중에 있을때 입출력 이벤트가 발생했는데 프로세스가 입출력 이벤트에 대한 응답을 위해 무작정 대기하고 있다면 프로세스의 자원을 낭비하는 결과를 초래합니다. 프로세서, CPU는 한번에 하나의 프로세스만을 처리하도록 되어있기 때문에 A프로세스에 대한 입출력 이벤트에 대한 응답을 대기하는 동안 아무일도 하지 않습니다. 멀티프로그래밍은 이렇게 낭비되는 시간동안 프로세스가 다른 프로세스를 수행할 수 있도록 하는 것 입니다.