해당 키워드들을 이해하기 위해서 먼저 간략하게 알아두고 글을 이해하면 좋을 것 같은 내용을 요약하겠습니다.
(아래에서 좀 더 세부적으로 설명할 것이니 이런 것이구나 하고 넘어가시면 됩니다.)
멀티 프로세스는 말 그대로 여러 프로세스를 사용하며 처리하는 방식입니다.
(하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행)
프로세스가 실행되는 절차를 살펴보면
작성된 프로그램이 실행되면 구현된 코드로 이뤄진 프로그램이 메모리에 올라가게되는데 이 때 메모리에서 수행하는 것을 프로세스라고 합니다.
그러면 멀티 프로세스는 어떻게 이뤄지는 것일까요?
CPU는 하나의 프로세스가 실행되기 위해서 CPU를 점유하고 있으면 다른 프로세스를 실행 상태에 올릴 수 없습니다.
-> 짧은 텀을 두고 전환하면서 실행시킵니다. (동시성)
이와 같은 프로세스는 아래와 같은 메모리 구조를 갖고 있습니다.
각 프로세스는 독립적입니다. 그러므로 프로세스들이 위의 그림과 같은 메모리 구조로 각자 고유만의 영역들을 갖고 있습니다. 그렇다보니 작업을 전환할 때 비용이 많이 들게 됩니다. 이것을 Context Switching이라고 합니다. 하지만 독립적인 특성으로 동기화 작업이 따로 필요하지 않다는 장점도 있습니다.
멀티 스레드는 멀티 프로세스와 비슷하게 여러 스레드를 사용하며 처리하는 방식입니다.
(하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것)
각 스레드는 프로세스의 자원을 공유합니다. 모든 자원을 공유하는 것은 아니고 Code, Data, Heap 영역을 공유합니다.
그러므로 멀티 스레드는 위에서 말한 Context Switching 비용이 적습니다. 하지만 자원을 공유하기 때문에 동기화 처리가 매우매우 중요합니다.
멀티 스레드는 프로세스 내에서 실행되며 프로세스의 자원을 할당받아 리소스 낭비를 줄이며 작업을 할당하여 처리를 하는 것입니다.
멀티 코어는 하드웨어 측면에서 하드웨어 측면에서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세서가 있는 것을 말합니다.
여기서 동시성과 병렬처리에 대해서 다시 말하자면 이렇습니다.
하나의 코어에서 하나 이상의 프로세스(혹은 스레드)가 번갈아가면서 진행되지만 동시에 진행되는 것처럼 보이는 것
둘 이상의 코어에서 동시에 하나 이상의 프로세스(혹은 스레드)가 한꺼번에 진행되는 것
멀티 프로세스, 멀티 스레드와 멀티 코어의 차이는 멀티 프로세스와 멀티 스레드는 소프트웨어 측면에서 바라봐야할 점이고 멀티 코어는 하드웨어 측면에서 봐야된다는 것입니다.
프로세스는 프로그램이 실행되어 메모리 상에 올라간 것이고, 스레드는 그 프로세스 내 하나 이상의 실행 단위입니다.
한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리방식(멀티 프로세스, 멀티 스레드)이 있다.
동시에 실행이 되는 것처럼 보이기 위해서 실행단위는 시분할로 cpu를 점유하여 contextSwitching을 한다.
멀티 프로세스는 독립적인 메모리를 갖고 있고 멀티 스레드는 자원을 공유한다.
멀티 코어는 실행 단위를 병렬적으로 처리할 수 있도록 프로세서가 있는 것이다.
좋은 내용 감사합니다.