Open Do-hyun-Kim opened 1 year ago
운영체제로부터 시스템 자원을 할당받는 작업의 단위이다.
Code
, Data
, Heap
, Stack
을 할당 받는다.*문맥교환: 하나의 프로세스에서 다른 프로세스로 CPU 제어권이 이양되는 과정
한 프로세스 내에서 실행되는 실행 단위이다.
Code
, Data
, Heap
은 공유하고 Stack
만 따로 할당 받는다.Code
, Data
, Heap
메모리 영역을 공유하기 때문에 문맥교환에 드는 비용이 적다.Stack
메모리 영역을 제외한 다른 메모리 영역들을 공유하기 때문에 데이터 동기화 문제 등이 발생할 수 있어 설계가 어렵다.GCD
는 Dispatch Queue
를 사용해서 멀티 스레딩을 지원하며 Main Queue
와 Global Queue
가 있다.
Main Queue
는 Main Thread
에서 사용되므로 UI 같이 즉시 처리해야하는 작업만 처리하도록 한다.Main Queue
사용시 동기(Sync) 작업을 수행하지 않도록 한다. Main Queue
는 직렬 큐이기 때문에 Sync 작업을 수행하도록 할 경우, 하나의 스레드인 Main Thread
안에서 Async 작업과 Sync 작업이 서로의 작업을 무한히 기다리는 교착상태(데드락) 가 발생하게 된다.Global Queue
는 Background Thread
에서 사용되므로 시간이 걸리는 작업을 처리할때 사용한다. 작업의 유형에 따라 Qos
를 사용하여 아래처럼 작업의 우선순위를 명시해서 처리하도록한다.
userInteractive
: (즉각실행)
중요하고 즉각적인 반응이 요구되는 작업일 경우 사용하며 Main Thread
에서 실행된다.userInitiated
: (거의 즉각 실행)
저장된 파일을 여는 등의 빠른 반응을 기대할때 사용한다.default
: (기본 실행)
userInteractive
와 userInitiated
의 중간 단계로 기본값으로 사용된다.utility
: ` 즉각적인 반응이 필요하지 않을 때 사용된다. 네트워크, 다운로드, 계산 등을 처리할때 사용한다.background
: 즉각적이지 않은 중요하지 않은 작업을 처리할때 사용한다.unspecified
: Qos
정보가 없음을 나타내며, 시스템에게 Qos
를 추론하도록 한다.작업의 단위
실행 흐름의 단위
*stack은 함수 호출 시 전달되는 인자, 되돌아가는 주소값, 함수 내에서 선언하는 변수 등을 저장하는 메모리 공간임. 독립적인 스택을 가졌다는 것은 독립적인 함수 호출이 가능하다라는 것이다.
Mutable, Immutable
Synchronized
GCD
Class, Struct
멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식들을 설명하시오.
Process란 무엇인가?
thread란 무엇인가?
multi thread
Swift Multi Thread 하기 위해서는?
Dispatch Queue
를 작업(Task)를 보내면 그에 따라 스레드(thread) 적절히 생성해서 실행하고 작업이 종료 되면 스레드(thread)를 GCD가 자동으로 제거한다.Queue Global Queue
,NSThread
,NSOperation
를 사용하여 멀티 스레딩(Multi Threading)을 한다.Multi Thread 장점
Multi Thread 단점
멀티스레딩 프로그래밍시 고려해야될 것
Main Thread(serial Queue)
에서 구현되어야 한다.Race Condition
) 가 발생 할 수 있다.📝 참고 사이트