NOW-ON / iOS-Interview-Preparation

iOS 면접 준비
3 stars 0 forks source link

GCD #1

Closed heydoy closed 1 year ago

heydoy commented 1 year ago
  1. 동시작업을 관리하기 위한 Low Level API (Lock과 Thread보다 작업하기 쉬운 모델)
  2. GCD를 사용하면 대상이 되는 작업(Task)를 대기행렬(큐)에 보내기만 하면 OS가 알아서 스레드를 생성/관리/해제하며 분산처리
  3. Concurrent Queue : iOS 프로세스나 앱은 한 개 이상의 스레드로 구성, OS 스케줄러는 각 스레드를 독립적으로 관리, 각 스레드는 동시적으로 실행될 수 있지만, 시스템이 어떤 것이 언제 어떻게 수행되는지는 예측할 수 없음
  4. Serial Queue : 오직 하나의 스레드에 할당됩니다. 따라서 순차적으로 처리되는 특징이 있고, 순서가 중요한 작업과 공유 자원에 동시에 접근하지 못하도록 Mutual Exclusion을 구현해야 하는 경우(Thread-safe) 등의 경우에 사용됩니다.
LeeJoobang commented 1 year ago
  1. 멀티코어 프로세서 시스템에 대한 애플리케이션 지원을 최적하기 위해 Apple에서 개발한 기술이다. 즉, 멀티쓰레드 작업을 처리하는 API이다.예를 들어 네트워크를 통해 데이터를 받아 화면을 갱신하는 앱이 있을 경우, 네트워크를 통해 작업시간이 많이 걸리게 된다. 모든 작업이 하나의 스레드로만 돌아갈 경우, 화면이 제대로 표시되지 않는다. 이때 동시성(Concurrency) 프로그래밍이 요구된다.
  2. 세부적으로 GCD의 경우 크게 3가지 Queue를 언급할 수 있다. 1. main.queue, 2. global.queue, 3. custome.queue가 있다.
  3. 세부 특성으로 1. main.queue - serial, 직렬, UI update처리, Main Thread에서만 작업, 2. global.queue - concurrent, qos 작업 우선순위 결정, 3. custom.queue - 기본은 serial, qos로 변경가능하다. qos의 경우 6가지가 있다. 1. .userInteractive, 2. .userInitiated, 3. .default, 4. .utility, 5. .background, 6. .unspecified가 있다.
wodyddml2 commented 1 year ago

GCD는 멀티쓰레딩 처리를 OS에서 편리하게 처리해주는 해주는 Apple이 제공하는 API로 DispatchQueue를 통해 작업을 관리합니다.

이 dispatchQueue는 두 종류로 나뉘는데

  1. Serial Queue
작업은 하나의 스레드에 할당이 되며 등록된 작업을 순차적으로 처리하는 방식으로 main thread는 Serial Queue이다.
UIApplication의 인스턴스가 main thread에서 처리되기 때문에 모든 UI는 main thread에서 처리되어야만 한다.

  2. Concurrent Queue
작업을 여러 스레드에 분산하여 할당하고 등록된 작업을 동시에 처리를 하는 방식
그렇기때문에 작업 순서를 보장하지 못한다.

Glsme commented 1 year ago

앱의 메인 스레드나 백그라운드 스레드에서 직렬 또는 동시 작업 실행을 관리하는 객체이다.

Queue 종류

Yun-YeoJin commented 1 year ago

동시작업을 관리하기 위한 Low Level API (Lock과 Thread보다 작업하기 쉬운 모델) GCD를 사용하면 대상이 되는 작업(Task)를 대기행렬(큐)에 보내기만 하면 OS가 알아서 스레드를 생성/관리/해제하며 분산처리

Concurrent Queue : iOS 프로세스나 앱은 한 개 이상의 스레드로 구성, OS 스케줄러는 각 스레드를 독립적으로 관리, 각 스레드는 동시적으로 실행될 수 있지만, 시스템이 어떤 것이 언제 어떻게 수행되는지는 예측할 수 없음

Serial Queue : 오직 하나의 스레드에 할당. 따라서 순차적으로 처리되는 특징이 있고, 순서가 중요한 작업과 공유 자원에 동시에 접근하지 못하도록 Mutual Exclusion을 구현해야 하는 경우(Thread-safe) 등의 경우에 사용됩니다.