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

송규빈·2022년 9월 22일
0

들어가기 전

해당 키워드들을 이해하기 위해서 먼저 간략하게 알아두고 글을 이해하면 좋을 것 같은 내용을 요약하겠습니다.
(아래에서 좀 더 세부적으로 설명할 것이니 이런 것이구나 하고 넘어가시면 됩니다.)

동시성

  • 동시에 실행되는 것처럼 보이는 방식
    -> 즉, 한 순간에 여러가지 일이 아니라 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것

병렬 처리

  • 실제로 동시에 작동되는 것

프로세스

  • 구현한 코드가 실행되었을 때 메모리에서 수행하는 것.
    -> 즉 프로그램이 실행된 것

스레드

  • 프로세스가 동작할 때 프로세스의 자원을 할당 받아 사용하는 것
    -> 즉 프로세스 내의 실행단위

메인 메모리: 프로세스가 CPU에서 실행되기 위해 대기하는 곳

멀티프로그래밍: 여러개의 프로그램이 동시에 실행된다

  • CPU 사용률을 극대화시키는데 목적
단점
  • CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기
해결책
  • CPU를 점유하는 프로세스를 아주 짧은 시간만 CPU에서 실행시키도록 하자 -> 멀티태스킹

멀티 태스킹

  • 프로세스의 응답시간을 최소화 시키는 데 목적
  • 하지만, 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함

멀티 프로세스

멀티 프로세스는 말 그대로 여러 프로세스를 사용하며 처리하는 방식입니다.
(하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행)

프로세스가 실행되는 절차를 살펴보면

작성된 프로그램이 실행되면 구현된 코드로 이뤄진 프로그램이 메모리에 올라가게되는데 이 때 메모리에서 수행하는 것을 프로세스라고 합니다.

그러면 멀티 프로세스는 어떻게 이뤄지는 것일까요?
CPU는 하나의 프로세스가 실행되기 위해서 CPU를 점유하고 있으면 다른 프로세스를 실행 상태에 올릴 수 없습니다.
-> 짧은 텀을 두고 전환하면서 실행시킵니다. (동시성)

이와 같은 프로세스는 아래와 같은 메모리 구조를 갖고 있습니다.

각 프로세스는 독립적입니다. 그러므로 프로세스들이 위의 그림과 같은 메모리 구조로 각자 고유만의 영역들을 갖고 있습니다. 그렇다보니 작업을 전환할 때 비용이 많이 들게 됩니다. 이것을 Context Switching이라고 합니다. 하지만 독립적인 특성으로 동기화 작업이 따로 필요하지 않다는 장점도 있습니다.

  • 장점: 안정성 (메모리 침범 문제를 OS 차원에서 해결)
  • 단점: ContextSwitching으로 인한 성능 저하, 작업량이 많을수록 오버헤드가 발생
  • Context Switching: 상태 정보를 저장하고 복원하는 일련의 과정
    즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정을 말함

멀티 스레드

멀티 스레드는 멀티 프로세스와 비슷하게 여러 스레드를 사용하며 처리하는 방식입니다.
(하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것)

각 스레드는 프로세스의 자원을 공유합니다. 모든 자원을 공유하는 것은 아니고 Code, Data, Heap 영역을 공유합니다.

그러므로 멀티 스레드는 위에서 말한 Context Switching 비용이 적습니다. 하지만 자원을 공유하기 때문에 동기화 처리가 매우매우 중요합니다.

멀티 스레드는 프로세스 내에서 실행되며 프로세스의 자원을 할당받아 리소스 낭비를 줄이며 작업을 할당하여 처리를 하는 것입니다.

  • 장점: 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소. 자원 공유 쉬움.
  • 단점: 안전성 문제. 하나의 스레드가 데이터 공간 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)
  • 멀티스레드의 안전성에 대한 단점은 Critical Section기법을 통해 대비. 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정
    (상호 배제, 진행, 한정된 대기를 충족해야함)

멀티 코어

멀티 코어는 하드웨어 측면에서 하드웨어 측면에서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세서가 있는 것을 말합니다.

여기서 동시성과 병렬처리에 대해서 다시 말하자면 이렇습니다.

동시성

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

병렬 처리

둘 이상의 코어에서 동시에 하나 이상의 프로세스(혹은 스레드)가 한꺼번에 진행되는 것

정리

  1. 멀티 프로세스, 멀티 스레드와 멀티 코어의 차이는 멀티 프로세스와 멀티 스레드는 소프트웨어 측면에서 바라봐야할 점이고 멀티 코어는 하드웨어 측면에서 봐야된다는 것입니다.

  2. 프로세스는 프로그램이 실행되어 메모리 상에 올라간 것이고, 스레드는 그 프로세스 내 하나 이상의 실행 단위입니다.

  3. 한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리방식(멀티 프로세스, 멀티 스레드)이 있다.

  4. 동시에 실행이 되는 것처럼 보이기 위해서 실행단위는 시분할로 cpu를 점유하여 contextSwitching을 한다.

  5. 멀티 프로세스는 독립적인 메모리를 갖고 있고 멀티 스레드는 자원을 공유한다.

  6. 멀티 코어는 실행 단위를 병렬적으로 처리할 수 있도록 프로세서가 있는 것이다.

profile
🚀 상상을 좋아하는 개발자

1개의 댓글

comment-user-thumbnail
2023년 11월 8일

좋은 내용 감사합니다.

답글 달기