본문 바로가기
iOS

[iOS+@] Concurrency (동시성)

by SiO2whocode 2025. 3. 25.

Concurrency(동시성)여러가지 일을 동시에 하는 것을 말함. (multi-core CPU가 이를 가능하게 함)

여러가지 task = 스레드를 의미하기도 하는데, 주로 메인스레드백그라운드 스레드를 구분하여 사용하면서

메인스레드는 혼잡하지 않게 빠르게 실행될 수 있도록 유지하고, 오래 걸리는 일백그라운드 스레드에 배치하는 식으로 사용한다.

이를 통해서, 사용자가 보는 UI 작업을 모두 메인 스레드에서 실행하게 해서 반응성이 좋게 유지한다.

 

🚙                  🚗                 🚕

— — —  main thread  — — —

 

🚙 🚕  🚗  🚙  🚕  🚗  🚙  🚕  🚗

— — background thread — —

 

 

스레드 생성, 관리를 위한 API

그치만 백그라운드 스레드는 많기 때문에 관리하기 복잡함 → Apple에서 스레드를 관리하기 쉽게 아래와 같은 API를 제공함.

  • Grand Central Dispatch (GCD)
  • NS Operation Queue

 

Queue 큐에 대해

큐는 자료구조에서도 봤듯이 FIFO (선입선출, First In First Out) 방식이다.

여기서 (스레드 관리를 위해) 사용되는 큐에는 두가지 종류가 있는데, Serial QueueConcurrent Queue가 있다.

  • Serial Queue
    • serial queue에서는 A → B → C 순으로 실행된다면 A 작업이 다 끝난 후 B 가 실행되고, B가 다 끝나면 C가 실행되는 방식이다.
    • 장점
      • 실행 순서를 예측하기 쉽다. (실행이 완료되는 순서)
      • race condition(경쟁 상태)를 예방할 수 있다.
        • 경쟁 상태란, 둘 이상의 스레드 또는 프로세스가 공유 자원에 동시에 접근하면서 실행 결과가 예측할 수 없는 상태가 되는 문제.
    • main thread는 serial queue이다.
  • Concurrent Queue
    • concurrent queue에서는 A → B → C 순으로 실행되기는 하지만, A 작업이 끝나는 것과 상관없이 B 작업을 실행한다. 따라서 경우에 따라 뒷순서의 작업이 더 빨리 완료되기도 한다.
    • 장점
      • 경우에 따라 작업이 빨리 끝날 수 있음 (Faster)
      • 그치만 작업 실행(완료) 순서를 예측하기 어려움 (unpredictable order)
      • race condition이 발생할 수 있음
    • background thread는 concurrent queue이다.
728x90

'iOS' 카테고리의 다른 글

[iOS] View Life Cycle (UIKit)  (0) 2025.03.28
[iOS] Delegate & Protocol  (0) 2025.03.26
[iOS+@] Dependency Injection (의존성 주입)  (0) 2025.03.24
[Swift] 순환참조와 strong, weak, unowned  (0) 2025.03.14
[iOS] Combine 기초 (추가 중)  (0) 2025.02.13