[Swift] Dispatch (1)
2023. 11. 23. 20:49
Dispatch (Framework)
시스템에서 관리하는 Dispatch 대기열에 작업을 제출하여 Multi Core 하드웨어에서 코드를 동시에 실행
- GCD(Grand Central Dispatch)라고 알려진 Dispatch에서는 macOS, iOS, watchOS 및 tvOS의 멀티코어 하드웨어에서
동시 코드 실행 지원에 대한 체계적이고 포괄적인 개선사항을 제공하는 언어 기능 - Runtime 라이브러리 및 시스템 개선사항이 포함되어 있음
DispatchQueue (Class)
앱의 Main Thread 또는 Background Thread에서 작업의 순차적(Serially) 또는 연속적(concurrently)으로 실행을
관리하는 객체
- App이 블록 객체 형태로 작업을 제출할 수 있는 FIFO Queue
- DispatchQueue는 작업을 직렬(Serially) 또는 동시(Concurrently)에 실행
- 제출된 작업은 System이 관리하는 Thread에서 실행 가능
- 앱의 Main Thread를 나타내는 DispatchQueue를 제외하고 System은 작업을 실행하는데 어떤 Thread를 사용하는지 보장하지 않음
- 작업 항목을 synchronously(동기) 또는 asynchronously(비동기)로 예약
- 작업 항목을 synchronously(동기)로 예약하면 해당 항목의 실행이 완료될 때까지 대기함
- 작업 항목을 asynchronously(비동기)로 예약하면 작업 항목이 다른 곳에서 실행되는 동안 코드가 계속 실행됨
※ Main Thread에서 작업항목을 동기(sync)로 실행하려고 하면 교착 상태(Deadlock)가 발생함
과도한 Thread 생성 방지
- 동시(concurrent) 실행을 위한 작업을 설계할 때 현재 실행 Thread에서 차단하는 method를 호출하지 마세요
→ 동시 DispatchQueue에 의해 예약된 작업이 Thread를 차단하면 System은 queue(대기열)에 있는 다른 동시 작업을 실행하기 위해 추가 Thread를 생성
→ 너무 많은 작업이 차단되면 System에서 App Thread가 부족해질 수 있음
728x90
'iOS > Swift' 카테고리의 다른 글
[iOS] LocalAuthentication (0) | 2024.01.06 |
---|---|
[Swift] URL, URLComponents (0) | 2023.12.30 |
[Swift] RelativeDateTimeFormatter(상대시간) (0) | 2023.11.20 |
[Swift] 공식문서 파헤치기 (Array, Set, Dictionary) (0) | 2023.11.11 |
[Swift] UISceneDelegate (0) | 2023.11.09 |