본문 바로가기
iOS

[iOS] Dispatch Queue

by thoonk: 2020. 11. 23.
반응형

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)
		}
	}
}

 

참조

dispatchqueue

 

Apple Developer Documentation

 

developer.apple.com

 

반응형

'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

댓글