iOS의 Thread
iOS의 Thread는 두 종류가 있다.
Main Thread와 Global Thread (= Background Thread)
Main Thread
iOS에서 Main Thread는 사용자와 상호작용하는 모든 것을 처리하는 역할을 한다. 터치 이벤트, 제스처, UI 업데이트 등 UI와 관련된 모든 작업들은 Main Thread에서 처리되어야 한다.
기본으로 작성하는 코드들은 모두 Main Thread에서 동작하게 되고,
시간이 걸리는 작업들을 Main Thread에서 실행하게 된다면 실제 앱에서는 버퍼링이 걸린 것처럼 느려지게 될 것이다.
그런 작업들은 Main Thread가 아닌 Global Thread에서 실행하여 백그라운드에서 작업을 처리하도록 하는 것이 좋다.
Global Thread
Global Thread는 Background Thread라고도 불리며 네트워크 요청, 이미지 처리와 같이 시간이 오래 걸리는 작업들을 수행하는데 사용된다.
앱이 사용자에게 보여지고 있는 상태가 아닐 때에도 실행 상태를 유지해야 할 때 Global Thread에서 처리를 한다.
예를 들어, 음악 어플에서 음악을 재생하고 어플을 내려도 음악은 그대로 나오는 것은 해당 작업이 Background Thread에서 처리되기 때문이다.
iOS의 Multi Threading
GCD, OperationQueue, Async/Await 등 iOS에서 멀티 스레딩을 처리하는 여러 가지 방법이 있지만 그 중 GCD를 살펴보려 한다.
GCD (Grand Central Dispatch)
GCD는 Dispatch라고도 알려져 있으며 Dispatch Queue를 이용하여 동시작업을 처리한다.
Dispatch Queue
Dispatch Queue는 2가지 종류가 있다.
1. 직렬(Serial) 큐 : 작업을 순차적으로 처리하며 한 번에 하나의 작업을 처리한다.
2. 동시(Concurrent) 큐 : 동시에 여러 개의 작업을 처리한다.
직렬과 동시에 대해서는 이 포스팅에서 조금 더 자세히 작성해두었다.
1. Main Queue (Serial)
메인 큐는 Main Thread에서 사용되는 큐로, 직렬 큐이다.
메인큐에서 동기적인 작업을 실행하려고 하면 교착상태가 발생하므로 sync는 사용해서는 안된다!
메인 스레드에서 실행하고 싶은 작업은 아래와 같이 작성한다.
DispatchQueue.main.async {
// 실행할 작업
}
2. Global Queue (Concurrent)
글로벌 큐는 동시 큐이고 QoS(Quality-of-service)라고 하는 작업의 우선순위를 지정할 수 있는 기능을 제공한다.
[QoS]
1. userInteractive
2. userInitiated
3. default
4. utility
5. background
6. unspecified
위로 갈수록 작업의 우선순위가 높다.
Global 큐는 다음과 같이 사용한다. QoS를 지정해주지 않는다면 기본은 `default`로 설정된다.
DispatchQueue.global().sync {
// 실행할 작업
}
DispatchQueue.global().async {
// 실행할 작업
}
만약 QoS를 지정하고 싶다면, 이렇게 작성한다.
DispatchQueue.global(qos: .background).async {
// 실행할 작업
}
'iOS' 카테고리의 다른 글
동기(Sync)와 비동기(Async)에 대한 이해 (5) | 2024.11.07 |
---|---|
[iOS] CMPedometer로 사용자의 걷기 데이터 받아오기 (이동 거리, 평균 페이스) (3) | 2024.10.13 |
[iOS] Naver Map SDK Swift Package 만들기 (3) | 2024.09.07 |