멀티 프로세스 vs 멀티 스레드 vs 멀티 코어

박준수·2022년 10월 16일
0

동시성 - 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것

하나의 프로세스에 하나의 스레드가 있는 경우

원래 한 프로세스가 실행되기 위해서 cpu를 점유하고 있으면 다른 프로세스는 실행 상태에 있을 수 없다. 노래를 듣다가 코딩을 하기위해서 인텔리제이를 키면 노래가 꺼지게 된다. 그래서 다수의 프로세스를 동시에 실행시키기 위해 여러개의 프로세스를 시분할로, 즉 짧은 텀을 반복하면서 전환해서 실행시킨다. 그렇다면 사용자는 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보인다(동시성).

스레드는 경량화된 프로세스

스레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용을 한다. 각 스레드는 스택 부분만을 따로 가지고 있는 것이다.

멀티 프로세스멀티 스레드는 모두 한 어플리케이션에 대한 처리방식의 일종이다!

한 어플리케이션이 여러가지 일을 처리할 때가 있다. 예를 들어서 여러 사용자가 로그인을 요청하는 상황이 있다고 하자. 한 프로세스는 매번 하나의 로그인만 처리할 수 있기 때문에 동시에 처리할 수 없다. 그래서 부모 프로세스가 fork()를 해서 자식 프로세스를 여러개 만들어서 일을 처리하도록 한다. 이때 자식 프로세스는 부모와 별개의 메모리 영역을 확보하게 된다(멀티 프로세스). 이렇게 멀티 프로세스는 각각의 프로세스에서 여러 프로그램을 동시에 실행시키기 위한 처리방식으로, 예를 들면 LoL을 하면서 유튜브로 노래를 틀고 Netflex로 영상을 띄어놓는 것이다.

반면 스레드는 한 프로세스 내에서 구분지어진 실행 단위이다(프로세스 일수도 있고 스레드 일수도 있다).프로세스가 다수의 스레드로 구분되어 있지 않으면 해당 프로세스의 하나밖에 없는 스레드가 실행단위가 되는 것이다. 프로세스 내에서 분리해서 여러 스레드로 나뉘어서 실행단위가 나뉘어지면 그게 바로 멀티스레드이다!! 예를 들어 인텔리제이를 사용할 때 테스트를 돌리는 동시에 코드를 작성, 수정하기도한다. 이렇게 한 어플리케이션에 대한 작업의 단위가 나뉘어질 때가 많다. 이때 각각의 스레드가 그 작업들을 담당하는 것이다. 하나의 프로그램에서 여러 동작을 동시에 실행시키는 처리방식

멀티 프로세스의 특징

  • 각 프로세스는 독립적
  • IPC를 사용한 통신
  • 자원 소모적, 개별 메모리 차지
  • Context Switching비용이 큼
  • 각 프로세스가 나뉘어 있기에 동기화 작업이 필요하지 않음

멀티 스레드의 특징

  • Thread끼리 긴밀하게 연결되어 있음 그만큼 동기화도 신경을 써야함
  • 공유된 자원으로 통신 비용 절감
  • 공유된 자원으로 메모리가 효율적임
  • Context Switching 비용이 적음
  • 공유 자원 관리를 해야함

멀티 코어

멀티 프로세스와 멀티 스레드는 처리방식의 일종이기에 좀더 소프트웨어에 가깝고 멀티 코어는 좀더 하드웨어의 측면에 가깝다.

멀티코어는 병렬처리, 즉 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 물리적으로 여러 코어를 사용해서 다수의 실행단위를 한순간에 처리할수 있게 해준것이다.

CPU한개에 코어 한개 => Concurrency 동시성 : 하나의 코어에서 하나 이상의 프로세스(혹은 스레드)가 번갈아가면서 진행되지만 동시에 진행되는 것처럼 보이는 것

CPU한개에 코어 여러개 => Parallelism 병렬처리 : 둘 이상의 코어에서 동시에 하나 이상의 프로레스(혹은 스레드)가 한꺼번에 진행되는 것

요약
1. 프로세스는 프로그램이 실행된 것이다.
2. 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위이다.
3. 한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리 방식(멀티 프로세스, 멀티스레드)이 있다.
4. 동시에 실행이 되는 것처럼 보이기 위해서 실행 단위는 시분할로 cpu를 점유하며 context switching을 한다.
5. 멀티 프로세스는 독립적인 메모리를 가지고 있지만 멀티 스레드는 자원을 공유한다. 그것에 따른 각각의 장단점이 있다.
6. 멀티 코어는 하드웨어 측면에서 실행 단위는 병렬적으로 처리할 수 있도록 여러 프로세스가 있는 것이다.

참고
멀티 프로세스 , 멀티 스레드

profile
방구석개발자

0개의 댓글