안녕하세요 🐶
빈 지식 채우기의 비니🙋🏻♂️ 입니다.
오늘은 GCD 1편! 프로세스와 쓰레드 관해 알아보는 시간을 가지겠습니다.
1. 개요
주니어 개발자로 프로젝트를 하다보면
Sync / Async
프로세스 / 쓰레드
Serial / Concurrent
Main Thread / Global Thread
등등..
많은 용어를 보게 되는데, 정확히 이러한 것들에 대해 잘 모르시는 분들을 위해!! 포스팅 하려구 합니다.
이번엔 먼저 프로세스 / 쓰레드 부터 다뤄보도록 하겠습니다~
2. 프로세스 ( Process )
운영체제로부터 시스템 자원을 할당받는 작업의 최소 단위
각각의 독립된 메모리 영역 ( Code, Data, Stack, Heap ) 을 각자 할당 받습니다.
그렇기 때문에 서로 다른 프로세스끼리는 절대 서로 접근할 수 없습니다.
왜냐?! 각각의 프로세스는 독립된 존재이기 때문!
메모리 구조 ( Code, Data, Stack, Heap )
2-1. 멀티 프로세스 ( Multi Process )
하나의 프로그램을 여러 프로세스로 구성하여, 각 프로세스마다 하나의 작업을 처리하도록 하는 것
아래의 그림과 같이 서로 다른 프로세스는 서로 다른 메모리 영역을 각각 가지고 있습니다!
위와 같은 멀티 프로세스의 예시는 아래와 같이 둘 수 있습니다.
[ 알람 어플의 멀티프로세스 구성 ]
- 알람 시간 동적을 구현하는 프로세스1
- 알람 시간이 울리기까지 계산하는 프로세스2
- 알람이 울리는 프로세스3
위와 같은 예시처럼 ~~
멀티 프로세스란, 하나의 프로그램 내에서 일어나는 여러 개의 작업을 다중 프로세스로 처리하도록 해주는 것입니다,
그럼! 멀티 프로세스의 장단점을 알아보도록 하죠~
[ 장점 ]
- 독립된 메모리 영역을 각자 할당받기 때문에, 프로세스 간 자원에 간섭할 수 없다.
- 독립된 구조이기 때문에 안정성이 높다.
[ 단점 ]
- *Context Switching 과정에서 CPU 부담도 커지고 오버헤드가 발생하게 될수도 있다.
- 서로 다른 프로세스를 메모리 영역으로 올리는 반복적인 과정
- 프로세스 간 자원 공유가 어렵다.
3. 쓰레드 ( Thread )
한 프로세스 내에서 동작되는 여러 실행의 최소 단위
프로세스 내에서 동작되는 것이기 때문에 메모리 영역을 독립적으로 할당받지 못합니다.
위와 같이 Code, Data, Heap 영역은 공유하고, Stack 영역만 독립적으로 할당받을 수 있습니다.
따라서 쓰레드끼리는 Heap 영역을 공유하며 같은 자원을 사용할 수 있으나,
각자의 Stack 영역은 접근이 불가능합니다.
3-1. 멀티 쓰레드 ( Multi Thread )
하나의 프로그램을 여러 쓰레드로 구성하여, 각 쓰레드마다 하나의 작업을 처리하도록 하는 것
아래와 같이 각각의 쓰레드는 Stack 영역만 독립적으로 할당을 받고 있습니다.
바로! 멀티 쓰레드의 장단점을 알아보도록 하죠~
[ 장점 ]
- 쓰레드 간 Code, Heap, Data 영역을 공유하기 때문에 *Context Switching이 빠르다.
- 서로 다른 프로세스를 메모리 영역으로 올리는 반복적인 과정
- 프로세스보다 생성 및 종료 시간이 빠르다.
[ 단점 ]
- 설계가 까다롭습니다.
- 독립적이지 않아 하나의 쓰레드에서 문제는 전체 쓰레드에 영향을 줍니다.
4. 정리
이상으로 프로세스(Process) vs 쓰레드(Thread) 포스팅을 마치겠습니다.
틀린 부분이나 궁금한 사항은 댓글 남겨주세요~🤭
참고
'iOS 🖥️ > Common' 카테고리의 다른 글
[ iOS ] GCD 4편 - GCD ( Grand Central Dispatch ) (0) | 2023.01.19 |
---|---|
[ iOS ] GCD 3편 - Serial vs Concurrent (0) | 2023.01.18 |
[ iOS ] GCD 2편 - Sync vs Async (2) | 2023.01.12 |
[ iOS ] 메모리 구조 ( Code, Data, Stack, Heap ) (0) | 2023.01.04 |