[iOS] 동시성 프로그래밍

정동·2022년 11월 29일
0
post-thumbnail

1. 비동기 처리

비동기 처리란?

분산 처리를 어떻게 하는지에 대한 코딩 방법으로 성능, 반응성, 최적화와 관련된 문제를 해결하기 위한 프로그래밍 기법


2. iOS에서의 동시성 처리

작업(Task)을 대기 행렬(Queue)에 보내기만 하면 iOS가 알아서 여러 쓰레드로 나눠서 분산처리(동시적 처리)를 함

iOS 프로그래밍의 대기열 종류

1) DispatchQueue (GCD - Grand Central DispatchQueue)

  • 직접적으로 쓰레드를 관리하지 않고 대기열의 개념을 이용해서 작업을 분산 처리하고 OS에서 알아서 쓰레드 개수를 관리하는 개념
  • 메인 쓰레드(1번)가 아닌 다른 쓰레드에서 오래 걸리는 작업(Ex: 네트워크 처리)들과 같은 작업들이 쉽게 비동기적으로 동작하도록 함

2) OperationQueue


3. 쓰레드

물리적 쓰레드

  • 실제 HW에 존재하는 쓰레드
  • Ex) 8코어 16쓰레드 -> 16개의 작업을 할 수 있음

소프트웨어적 쓰레드

  • 하나의 물리적 쓰레드가 1개 이상의 쓰레드 객체(NSThread)를 생성할 수 있음
  • 물리적인 쓰레드와 1:1 매칭이 아님
  • iOS 영역(Thread Pool)에서 관리
  • 메인 쓰레드(1번 쓰레드) : 1초에 60번(0.0166초 마다) 화면을 다시 그려야 하는 역할도 가지고 있음

4. 동기(Sync), 비동기(Async)

(큐에 전달된 작업을) 다른 쓰레드로 보낸 후 기다릴지 말지에 관련된 개념

동기

  • 메인 쓰레드의 작업을 다른 쓰레드로 보내고 작업이 끝날 때 까지 기다렸다가(Blocking) 다른 작업을 수행

비동기

  • 메인 쓰레드의 작업을 다른 쓰레드로 보내고 작업이 끝날 때 까지 기다리지 않고(Non-Blocking) 다른 작업을 수행

5. 직렬(Serial), 동시(Concurrent) 처리

메인 쓰레드에서 (큐로 작업을 보낸 후) 다른 쓰레드로 작업을 보내는 것에 관련된 개념

직렬 처리

  • (보통 메인 쓰레드에서) 분산처리 시킨 작업을 하나의 쓰레드에서만 처리하는 개념
  • 작업의 순서가 필요할 경우 직렬 처리 사용

동시 처리

  • (보통 메인 쓰레드에서) 분산처리 시킨 작업을 여러개의 쓰레드에서 처리하는 개념
  • 각자 독립적이지만 유사한 여러개의 작업을 처리할 때 사용
  • ex) TableView의 각 셀에 이미지를 업로드 하는 경우
profile
예비 iOS 개발자입니다.

0개의 댓글