반응형
DispatchQueue 클래스:
- 앱의 메인 스레드 또는 백그라운드 스레드에서 작업 실행을 직렬 또는 동시에 관리하는 객체입니다.
- 애플리케이션이 블록 객체 형태로 작업을 제출할 수있는 FIFO 큐
선언
class DispatchQueue : DispatchObject
작업 항목을 담아 Queue에 추가하는 구조이며 작업은 시스템에 의해 관리되는 스레드 풀에서 실행됩니다.
작업 항목을 동기적 또는 비동기적으로 예약합니다.
-
동기적인 작업은 여러 가지 작업 항목이 쌓여있을 때 스레드를 호출해 하나 하나 작업 을 순서대로 실행합니다.
-
반면에, 비동기적인 작업은 DispatchQueue외 추가적인 스레드를 생성하여 작업을 추가한 뒤 DispatchQueue의 모든 동기적인 작업이 완료되기 전에 추가 스레드의 작업을 비동기로 실행한 뒤 나머지 작업을 재개하는 방식입니다.
메인 큐에서 작업 항목을 동기적으로 실행하려고 하면 교착 상태가 발생할 수 있습니다.
과도한 스레드 생성 방지
1. 동시 실행을 위한 작업을 디자인할 경우, 현재 실행되고 있는 스레드를 블락하면 안 됩니다.
그럴 경우, 시스템은 동시 작업을 하기 위해 더 많은 스레드를 생성하기 때문입니다.
2. 너무 많은 private한 동시 디스패치 큐를 만들면 안 됩니다.
각 디스패치 큐는 스레드 자원을 소비하므로 추가 동시 디스패치 큐를 생성하면 스레드 소비 문제가 악화됩니다.
디스패치 큐 생성 예시 (비동기)
DispatchQueue.main.async {
if let index: IndexPath = tableView.indexPath(for: cell){
if index.row == indexPath.row{
cell.thumbImageView?.image = UIImage(data: imageData)
}
}
}
참조
반응형
'iOS' 카테고리의 다른 글
[iOS] Frame과 Bounds의 차이 (0) | 2021.01.12 |
---|---|
[iOS] UNUserNotificationCenter를 이용해서 로컬 푸시하기! (1) | 2021.01.05 |
[iOS] User Notification (1) | 2020.12.29 |
[iOS] Label에 취소선 긋기 (1) | 2020.12.24 |
[iOS] JSON 파싱 (0) | 2020.12.04 |
댓글