1. DispatchQueue - Serial / Concurrent
- Dispatch - 보내다(파견하다)
- Queue - 대기열
DispatchQueue에 작업을 넘길때 2가지를 꼭 정해줘야 한다.
- 단일 스레드사용 or 다중 스레드사용 (Serial or Concurrent)
- 작업 처리방식 동기 or 비동기 (sync or async)
DispatchQueue 스레드 생성
// Serial Queue
DispatchQueue(label: "Serial")
DispatchQueue.main
// main은 전역적으로 사용되는 Serial DispatchQueue 입니다.
// Concurrent Queue
DispatchQueue(label: "Concurrent", attributes: .concurrent)
DispatchQueue.global()
- attributes를 따로 설정하지 않으면 기본값 Serial로 설정된다.
동기와 비동기처리를 정하는 법
// 동기, sync
DispatchQueue.main.sync {}
DispatchQueue.global().sync {}
// 비동기, async
DispatchQueue.main.async {}
DispatchQueue.global().async {}
DispatchQueue.main / global
- 이미 만들어져 있는 큐로 각각 Serial / Concurrent 큐다.
- main은 앱이 실행되는 동안에는 늘 메모리에 올라와 있으며 또 전역적으로 사용 가능한 큐다.
- global은 main스레드가 아닌, 작업을 처리하기 위해 발생한 스레드다.
- 작업을 처리할 때 메모리에 올라왔다가, 작업이 끝나면 메모리에서 제거된다.
Main 스레드란?
- 앱이 실행되는 동안에는 늘 메모리에 올라와 있는 앱의 기본이 되는 스레드