Dispatch Queue 종류
main queue, global queue, custom queue 세 종류의 queue가 있습니다. ㅎ
1. main queue
- main queue는 serial 합니다.
- 오직 하나만 존재!! 우리가 쓰는 main thread에서 처리!! UI업데이트를 주로한다.
- main queue로 보내면 무조건 메인 스레드로만 보내고 메인 스레드는 오직 한개 뿐
- main queue는 main thread로만 task를 보내기 때문에 무조건 serial입니다. (ㅋㅋ 당연한말)
2. global queue
- global queue는 concurrent 합니다.
- concurrent 특성을 가진 queue입니다.
- QoS(Quality Of Service)를 가지며 6종류입니다. 이 QoS를 통해 작업의 우선순위를 결정할 수 있습니다.
3. custom queue
- 말 그대로 커스텀 사용자 설정!! 입니다..
- custom queue는 default로 serial특성을 가지지만 Concurrnet로 변경도 가능합니다.
- Qos 설정 가능
이렇게 생성할때 인자에 label을 붙이면 custom queue가 됩니다.
attributes 및 qos 설정도 가능합니다. ㅎ
만들어서 객체로 쓰면됩니다. ㅎ
QoS의 종류
userInteractive
- 사용자와 직접 상호작용 하는 작업 (ex UI업데이트, 애니메이션)
- 사용자의 행동에 대한 즉각적인 반응해야 하지만 메인 스레드에서 처리하면 많은 로드가 걸리는 작업들을 userIneractive에서 처리해서 바로 동작하는 것처럼 보이게 합니다.
userInitiated
- 클릭할 때 작업을 수행하는 것과 같은 즉각적인 결과가 필요한 작업 (ex 저장된 문서 열기)
- userInteractive보다 조금 느리고 사용자들도 어느정도 이를 인지하고 있음
default
- 일반적인 작업
utility
- 보통 progress bar와 함께 길게 실행되는 작업 (데이터 다운로드)
background
- 유저가 직접적으로 인지하지 않는 시간이 덜 중욯나 작업 (동기화 및 백업)
unspecified
- QoS 정보가 없음 (사용할 일 잘 없음)
userInteractive - > unspecified로 갈수록 우선순위가 낮아지며 QoS 우선 순위가 더 높은 일에 더 많은 스레드를 배치합니다.
+ QoS마다 배당되는 스레드가 달라서 데드락현상을 QoS로 피할 수 있다.
그리고 task에도 우선 순위를 정할 수 도 있습니다....???????????!!!!!!!!!!!!!!!!
queue에도 하고 task에도 다르게 QoS를 설정하면 어케될까요?!?!
- 둘중 우선 순위가 높은걸 따릅니다.
- queue에 QoS가 다른 task를 넣으면 그때 그떄 비교해서 높은걸 따릅니다.
참고
후기
- customQueue를 만들면서 깨달은게.. DispatchQueue또한 클래스라 인스턴스 만들어서 사용해도 된다는 것을 까먹네요.. 이제 잘하면 되지 뭐 ㅎ
- 다양한 QoS가 있는데 적재 적소에 잘 쓰게되면 좋겟다아아 ㅎ
'iOS' 카테고리의 다른 글
[iOS] 키보드에 맞게 view 수정, NotificationCenter, UIResponder (0) | 2021.04.12 |
---|---|
[iOS] DispatchGroup, DispatchItem, DispatchSemaphore (0) | 2021.04.10 |
[iOS]동시성 프로그래밍, GCD, 동기, 비동기, 직렬성 (0) | 2021.04.10 |
[iOS] updateCycle (0) | 2021.04.07 |
[iOS] RunLoop (0) | 2021.04.07 |