본문 바로가기

iOS/iOS

iOS) 프로세스(Process) vs 쓰레드(Thread)

 

 

안녕하세요! 소들입니다 :)

오늘은 쓰레드 관련해서 공부해볼 거예요!!!!

으으.. 네트워크 통신하다보면

 

Sync / Async

프로세스 / 쓰레드

Serial / Concurrent

Main Thread / Global Thread

등등....

 

이런 단어들을 많이 보게 되는데,

정확하게 개념을 이해하고 있진 못하시는 분들을 위해(나 포함)

이번 포스티팅을 통해 다 정리해보고자 합니다!!!!!!

 

이번엔 먼저 프로세스 / 쓰레드 부터 다뤄 봅시당 :)

모든 포스팅은 편의 말투로 합니다~!!

 

 

 

 

1. 프로세스(Process) vs 쓰레드(Thread)

 

자, 먼저 프로세스와 쓰레드가 무엇인지에 대해 알아볼 것임 👀

 

 

 

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

 

  프로세스(Process)  

 

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

 

프로세스의 개념은 위와 같음을 말하는 것임!!

따라서 이 프로세스들은 

 

 

 

각각의 독립된 메모리 영역 (Code, Data, Stack, Heap)을 각자 할당 받음!

따라서 프로세스끼리는 서로의 변수나 자료구조에 대해 절대 접근할 수 없음

만약, A 프로세스가 B 프로세스 자원 접근하려고 하면,

프로세스간 통신(IPC)를 사용해야 함(파일, 소켓 등)

 

 

 

  멀티 프로세스(Multi Process)  

 

 

하나의 프로그램을 여러 개의 프로세스로 구성하여,

각 프로세스마다 하나의 작업(Task)씩 처리하도록 하는 것

 

을 말함!

예를 들어 우리가 알람 어플을 사용 하면서

 1초 후에 울리는 알람을 맞춘다고 해보면

 

알람 시간 조정 동작을 구현하는 프로세스

 알람 시간이 울리기까지 계산하는 프로세스

알람이 울리는 프로세스

 

이런 식으로 알람이라는 하나의 프로그램에서 일어나느 여러 개의 작업

프로세스를 여러 개 생성하여 각자 하나씩 처리하도록 해주는 것임!

 

먼저, 멀티 프로세싱의 장점부터 말하겠음

앞서 설명했듯이, 프로세스는 독립된 메모리 영역을 각자 할당받기 때문에,

프로세스 간 서로의 자원에 침투할 수 없음

 

따라서 독립된 구조이기 때문에 안정성이 높음!

A라는 프로세스에서 문제가 생긴다고 해도, B라는 프로세스 입장에선 모 어쩌라고가 되는 것임

 

그렇다면 단점은,

아까 알람을 예로 들었으니 알람으로 설명하자면

우리가 알람을 1초 후로 맞추면, 등록하자 마자 동시에 알람이 울려서

각각의 프로세스들이 동시에 진행되는 것처럼 보이지만,

실제로 CPU는 위 프로세스들을 빠르게 왔다 갔다하며 실행하고 있음

 

따라서, 프로세스를 왔다 갔다 하는 과정에서

A프로세스를 실행할 땐 A프로세스의 메모리 영역을 올리고, 

B프로세스를 실행할 땐 B프로세스의 메모리 영역을 올리고

이런 작업들을 Context Switching이라고 하는데,

프로세스는 메모리가 모두 독립적으로 존재하기 때문에,

Context Switching 시 CPU의 부담도 커지고 오버헤드가 발생하게 된다는 것이 가장 큰 단점임

 

또, 프로세스 간 자원 공유가 어렵다는 점도 또 하나의 단점임

 

 

 

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

 

  쓰레드(Thread)  

 

한 프로세스 내에서 동작되는 여러 실행의 흐름

 

쓰레드의 정의는 이럼

쓰레드는 프로세스가 아닌, 프로세스 내에서 동작되는 것이기 때문에

메모리 영역을 독립적으로 할당받지 못함!

 

따라서,

 

 

이런 식으로 Code, Data, Heap 영역은 공유하고 Stack 영역만 독립적으로 할당받을 수 있음!!

(Stack 영역만 별도로 가지는 이유는 Stack 영역이 LIFO라서,

Stack이 쌓이면 프로세스가 섞인 채로 순서대로 나와 흐름에 방해를 주기 때문이라 함 ;ㅁ;)

따라서 쓰레드들 끼리는 힙 영역을 공유하여 같은 자원을 접근할 수 있지만,

각자의 스택 영역은 서로 접근할 수 없음

 

 

 

  멀티 쓰레드(Multi Thread)  

 

하나의 프로그램을 여러 개의 쓰레드로 구성하여,

각 쓰레드마다 하나의 작업(Task)씩 처리하도록 하는 것

 

윈도우, 리눅스 등 많은 운영체제가 멀티 프로세싱을 지원하지만,

멀티 쓰레드를 기본으로 하고 있음!!

그럼 왜 멀티 프로세싱이 아닌, 멀티 쓰레드가 기본인지 장단점을 살펴보자 :)

 

먼저 장점부터 보자면,

쓰레드 간 Code, Data, Heap 영역을 공유하기 때문에, Context Switching이 빠름

또한 프로세스를 생성하여 자원을 할당하는 것이 아니기 때문에,

생성/종료 시간도 프로세스보다 빠름

 

또 프로세스 간 통신이 까다로운 반면에, 쓰레드들은 stack 영역을 제외하고

나머지 영역을 공유하기 때문에 통신 방법이 훨씬 간단함

 

다만 단점도 존재함

설계가 까다로움. 왜냐면 Stack영역 빼고 공유를 하기 때문에,

A쓰레드가 접근하려는 힙 영역의 자원을 B가 갑자기 접근해서 바꿔버리는 등

자원 공유의 문제가 생기기 때문(동기화 문제)

또한 독립적이지 않아, 하나의 쓰레드에서 문제가 발생 시 전체 쓰레드가 영향을 받음

단일 프로세스 시스템의 경우 효과를 기대하기 어렵다는데.. 이건 잘 이해가 안가서

나중에 이해하면 추가 하겠음!!

 

 

 

 

2. 정리

 

  멀티 프로세스 멀티 쓰레드
정의 하나의 프로그램을 여러 개의 프로세스로 구성하여, 각 프로세스마다 하나의 작업(Task)씩 처리하도록 하는 것 하나의 프로그램을 여러 개의 쓰레드로 구성하여, 각 쓰레드마다 하나의 작업(Task)씩 처리하도록 하는 것
생성 / 종료 시간 많은 시간 소요 적은 시간 소요
Context Switching 많은 시간 소요 적은 시간 소요
자원 접근 IPC 사용 공유 자원 사용
메모리 할당 Code/Data/Stack/Heap
모두 독립적으로 할당
Code/Data/Heap 만 공유
Stack만 독립적으로 할당
장점 독립된 구조이기 때문에
안전성이 높음
Context Switching이 빠름
생성/종료 시간도 빠름
프로세스 간 자원 공유가 간단함
단점 Context Switching 시 시간이 많이 소요되는 등 오버헤드 발생
생성/종료 시간이 오래 걸림
프로세스 간 자원 공유가 어려움

설계가 까다로움
동기화 문제가 있음
하나의 쓰레드에서 문제 발생 시 전체 쓰레드에 영향이 감

 

 

 



Calendar
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
최근 댓글
Visits
Today
Yesterday