iOS - 프로세스(Process) / 스레드(Thread)
프로세스(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 ]