프로세스 (Process)
✏️ 프로세스 : 운영체제로부터 시스템 자원을 할당받는 작업의 단위
✅ 프로세스는 각각의 독립된 메모리 영역을 각자 할당 받는다.
✅ 프로세스끼리는 서로의 변수나 자료구조에 대해 절대 접근할 수 없다.
✅ 프로세스 A가 프로세스 B의 자원에 접근하려고 하면, 프로세스간 통신(IPC)를 사용해야한다. (파일, 소켓 등)
✏️ 멀티 프로세스 : 하나의 프로그램을 여러 개의 프로세스로 구성하여, 각 프로세스마다 하나의 Task씩 처리하도록 하는 프로세스
✅ 프로세스는 독립된 메모리 영역을 각자 할당받기 때문에 프로세스끼리 서로의 자원에 접근할 수 없다. 따라서 독립된 구조이기 때문에 안정성이 높다.
✅ 멀티 프로세스는 각각의 프로세스들이 동시에 진행되는 것처럼 보이지만, 실제로 CPU는 각 프로세스들을 빠르게 옮겨가며 실행하고 있다. 따라서 프로세스를 옮겨가는 과정에서 프로세스 A를 실행하면 프로세스 A의 메모리 영역을 올리고, 프로세스 B를 실행하면 프로세스 B의 메모리 영역을 올리게 된다. 이러한 작업을 Context Switching이라고 하는데, 프로세스는 각각의 독립된 메모리 영역을 각자 할당 받기 때문에 Context Switching시에 CPU의 부담도 커지고 오버헤드가 발생한다.
✅ 프로세스 간 자원 공유가 어렵다.
쓰레드 (Thread)
✏️ 쓰레드 : 한 프로세스 내에서 동작되는 여러 실행의 흐름
✅ 쓰레드는 프로세스가 아닌, 프로세스 내부에서 동작하기 때문에 메모리 영역을 독립적으로 할당받지 못한다.
✅ Code, Data, Heap 영역은 공유하고 Stack 영역만 독립적으로 할당받을 수 있다. (Stack 영역만 별도로 가지는 이유는 Stack 영역이 LIFO(후입선출)이기 때문에, Stack이 쌓이게 되면 프로세스가 섞인 채로 순서대로 나와 흐름에 방해를 줄 수 있기 때문이라고 한다.)
✅ 쓰레드끼리는 Heap 영역을 공유하여 같은 자원을 접근할 수 있지만, 각자의 Stack 영역은 서로 접근할 수 없다.
✏️ 멀티 쓰레드 : 하나의 프로그램을 여러 개의 쓰레드로 구성하여, 각 쓰레드마다 하나의 Task씩 처리하도록 하는 것
✅ 쓰레드 간 Code, Data, Heap 영역을 공유하기 때문에, Context Switcing이 빠르다.
✅ 프로세스를 생성하여 자원을 할당하는 것이 아니기 때문에, 생성과 종료 시간도 프로세스보다 빠르다.
✅ 쓰레드는 Stack 영역을 제외하고 나머지 영역을 공유하기 때문에, 통신 방법이 훨씬 간단하다.
✅ 쓰레드는 Stack 영역을 제외하고 나머지 영역을 공유하기 때문에, 설계가 까다롭다. (쓰레드 A가 접근하려는 힙 영역의 자원을 쓰레드 B가 갑자기 접근해서 수정하는 등 자원 공유 문제가 발생하기 때문이다 - 동기화 문제)
✅ 독립적이지 않아, 하나의 쓰레드에서 문제 발생 시 전체 쓰레드가 영향을 받는다.
'iOS > iOS' 카테고리의 다른 글
[iOS] Xcode에서 앱 이름 변경하기 (0) | 2024.01.27 |
---|---|
[iOS] 동기(Sync), 비동기(Async) (1) | 2024.01.26 |
[iOS] 생명주기 - ViewController LifeCycle 2 (1) | 2023.08.20 |
[iOS] 생명주기 - ViewController LifeCycle 1 (0) | 2023.08.17 |
[iOS] 생명주기 - iOS App LifeCycle 2 (1) | 2023.08.15 |