멀티 프로세싱은 하드웨어 관점으로 본다면 다수의 프로세서(CPU 등)가 동시에 작업을 처리
하는 것을 말합니다.
이해하기 쉽게 사진으로 본다면
이런 식으로 두개 이상의 프로세서가 하나 이상의 작업을 동시에 처리
하는 걸 멀티 프로세싱이라고 합니다.
그리고 프로세서는 주변 장치, 대용량 저장장치, 전원 공급장치를 서로 공유하기 때문에 여러개의 단일 프로세싱보다 비용이 더 저렴하고
만약 하나의 프로세서가 고장
이 나더라도 다른 프로세서에서 해당 작업을 나눠서 처리
합니다.
그렇기 때문에 작업이 중지되지 않고 단순히 속도가 느려지기만 하는 장점이 있습니다.
멀티 태스킹은 소프트웨어적으로 본 멀티 프로세싱이며 하나의 작업
을 운영체제의 스케쥴링에 따라 번갈아가면서 수행
하는 것을 말합니다.
이렇게 실행하고 있는 작업을 바꾸는 걸 Context swiching
이라고 합니다.
이 작업은 아주 빠르게 동작되기 때문에 우리는 많은 작업들이 동시에 처리된다고 생각하는 것 입니다.
멀티 태스킹에 사용되는 스케쥴링에는 다음과 같은 방법들이 있습니다.
멀티 프로그래밍은 멀티 태스킹과 비슷하지만 다릅니다.
멀티 태스킹은 운영체제의 스케쥴링에 따라서 작업을 바꾸게 되지만 멀티 프로그래밍은 특정 작업을 처리하다가 대기
를 해야하는 상황이 발생했을 때 낭비되는 자원을 줄이기 위해서 다른 작업
을 하는 것을 말합니다.
예를 들어서 A라는 작업을 하고 있는데 입력을 대기받아야하는 상황이 있는데 계속 대기하고 있는다면 자원의 낭비가 심해질테니 입력을 받을 동안 B라는 작업을 하는 것 입니다.
멀티 스레딩은 하나의 프로세스
내에서 두 개 이상의 스레드
를 사용하는 방식을 말합니다.
여러개의 프로세스를 이용하는 것 말고 왜 이 방식을 사용할까요?
첫 번째로 스레드는 프로세스 내의 자원을 공유
합니다. 그렇기 때문에 여러개의 프로세스를 사용하는 것 보다 자원의 낭비가 적습니다.
두 번째는 스레드가 자원을 공유하기 때문에 별도의 작업 없이 자원을 공유
할 수 있습니다.
세 번째는 자원을 교환할 때 캐시 메모리를 비울 필요가 없기 때문에 속도가 빠릅니다.
이런 장점들 때문에 멀티 스레딩을 사용합니다.
하지만 이런 멀티 스레딩에도 치명적인 단점이 있습니다.
하나의 스레드에서 문제가 발생하면 다른 스레드에도 영향
을 끼칠 수 있습니다.
그리고 공유 자원에 한꺼번에 접근해서 작업을 하면 문제가 발생할 수 있기 때문에 동기화 작업이 필수적
입니다.