Language/Swift

iOS - 프로세스(Process) / 스레드(Thread)

비코딩 2022. 10. 31. 18:22

프로세스(Process)

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

프로세스들은 각각의 독립된 메모리 영역 (Code, Data, Stack, Heap)을 각자 할당 받는다.

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

A 프로세스가 B프로세스 자원 접근하려고 하면 프로세스간 동신(IPC)를 사용해야 한다.

 

 

멀티 프로세스(Multi Process)

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

ex) 알람

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

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

 - 알람이 울리는 프로세스 

 

장점

 - 프로세스 간 서로의 자원에 접근할 수 없음 -> 독립된 구조이기 때문에 안정성이 높음

 

단점

 - 프로세스는 메모리가 모두 독립적으로 존재 -> CPU의 부담이 커지고 오버헤드 발생

 - 프로세스 간 자원 공유가 어려움

 

 

스레드(Thread)

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

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

 - Code, Data, Heap 영역은 공유

 - Stack 영역만 독립적으로 할당

 - 따라서 스레드들 끼리는 힙 영역을 공유하여 같은 자원을 접근할 수 있지만, 각자 스택 영역은 서로 접근할 수 없다.

 

 

멀티 스레드

하나의 프로그램을 여러 개의 스레드로 구성하여, 각 스레드마다 하나의 작업(Task)씩 처리하도록 하는 것

 

장점

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

 - 또한 프로세스를 생성하여 자원을 할당하는 것이 아니기 때문에, 생성/종료 시간도 프로세스보다 빠름

 - 스레드 간 통신은 stack 영역을 제외하고 나머지 영역을 공유하기 때문에 통신 방법이 훨씬 간단

 

단점

 - 자원 공유의 문제가 생기기 때문에(동기화 문제) 설계가 까다로움

 - 하나의 스레드에서 문제가 발생 시 전체 스레드가 영향을 받음

 

[출처 : https://babbab2.tistory.com/63