본문 바로가기
iOS📱/Common

[ iOS ] GCD 1편 - 프로세스(Process) vs 쓰레드(Thread)

by 텅빈비니 2023. 1. 11.
반응형

안녕하세요 🐶
빈 지식 채우기의 비니🙋🏻‍♂️ 입니다.

오늘은 GCD 1편! 프로세스와 쓰레드 관해 알아보는 시간을 가지겠습니다.

 

1. 개요

주니어 개발자로 프로젝트를 하다보면 

 

Sync / Async

프로세스 / 쓰레드

Serial / Concurrent

Main Thread / Global Thread 

등등..

 

많은 용어를 보게 되는데, 정확히 이러한 것들에 대해 잘 모르시는 분들을 위해!! 포스팅 하려구 합니다.

이번엔 먼저 프로세스 / 쓰레드 부터 다뤄보도록 하겠습니다~

 

2. 프로세스 ( Process )

운영체제로부터 시스템 자원을 할당받는 작업의 최소 단위

간단한 메모리 구조

각각의 독립된 메모리 영역 ( Code, Data, Stack, Heap ) 을 각자 할당 받습니다.

그렇기 때문에 서로 다른 프로세스끼리는 절대 서로 접근할 수 없습니다.

왜냐?! 각각의 프로세스는 독립된 존재이기 때문!

 

메모리 구조 ( Code, Data, Stack, Heap )
 

[ iOS ] 메모리 구조 ( Code, Data, Stack, Heap )

안녕하세요 🐶 빈 지식 채우기의 비니🙋🏻‍♂️ 입니다. 오늘은 메모리구조에 대해 알아보는 시간을 가지겠습니다. 1. 개요 운영체제(OS)는 메모리에 공간을 할당을 해줍니다. 대표적으로 아

beanistory.tistory.com

 

2-1. 멀티 프로세스 ( Multi Process )

하나의 프로그램을 여러 프로세스로 구성하여, 각 프로세스마다 하나의 작업을 처리하도록 하는 것

아래의 그림과 같이 서로 다른 프로세스는 서로 다른 메모리 영역을 각각 가지고 있습니다!

멀티 프로세스

위와 같은 멀티 프로세스의 예시는 아래와 같이 둘 수 있습니다.

[ 알람 어플멀티프로세스 구성 ]
- 알람 시간 동적을 구현하는 프로세스1
- 알람 시간이 울리기까지 계산하는 프로세스2
- 알람이 울리는 프로세스3

위와 같은 예시처럼 ~~

멀티 프로세스란, 하나의 프로그램 내에서 일어나는 여러 개의 작업을 다중 프로세스로 처리하도록 해주는 것입니다,

 

그럼! 멀티 프로세스의 장단점을 알아보도록 하죠~

 

[ 장점 ]

  1. 독립된 메모리 영역을 각자 할당받기 때문에, 프로세스 간 자원에 간섭할 수 없다.
  2. 독립된 구조이기 때문에 안정성이 높다.

 

[ 단점 ]

  1. *Context Switching 과정에서 CPU 부담도 커지고 오버헤드가 발생하게 될수도 있다.
    • 서로 다른 프로세스를 메모리 영역으로 올리는 반복적인 과정
  2. 프로세스 간 자원 공유가 어렵다.

 

3. 쓰레드 ( Thread )

프로세스 내에서 동작되는 여러 실행의 최소 단위

프로세스 내에서 동작되는 것이기 때문에 메모리 영역을 독립적으로 할당받지 못합니다.

위와 같이 Code, Data, Heap 영역은 공유하고, Stack 영역만 독립적으로 할당받을 수 있습니다.

따라서 쓰레드끼리는 Heap 영역을 공유하며 같은 자원을 사용할 수 있으나,

각자의 Stack 영역은 접근이 불가능합니다.

 

3-1. 멀티 쓰레드 ( Multi Thread )

하나의 프로그램을 여러 쓰레드로 구성하여, 각 쓰레드마다 하나의 작업을 처리하도록 하는 것

아래와 같이 각각의 쓰레드는 Stack 영역만 독립적으로 할당을 받고 있습니다.

멀티 쓰레드

바로! 멀티 쓰레드의 장단점을 알아보도록 하죠~

 

[ 장점 ]

  1. 쓰레드 간 Code, Heap, Data 영역을 공유하기 때문에 *Context Switching이 빠르다.
    • 서로 다른 프로세스를 메모리 영역으로 올리는 반복적인 과정
  2. 프로세스보다 생성 및 종료 시간이 빠르다.

 

[ 단점 ]

  1. 설계가 까다롭습니다.
  2. 독립적이지 않아 하나의 쓰레드에서 문제는 전체 쓰레드에 영향을 줍니다.

 

4. 정리

이상으로 프로세스(Process) vs 쓰레드(Thread) 포스팅을 마치겠습니다.

틀린 부분이나 궁금한 사항은 댓글 남겨주세요~🤭

 


참고

반응형