본문 바로가기

iOS

[iOS] Dispatch Queue 종류

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를 넣으면 그때 그떄 비교해서 높은걸 따릅니다.

 

 

 

참고

 

 

Medium

 

sujinnaljin.medium.com

 

 

후기

- customQueue를 만들면서 깨달은게.. DispatchQueue또한 클래스라 인스턴스 만들어서 사용해도 된다는 것을 까먹네요.. 이제 잘하면 되지 뭐 ㅎ 

- 다양한 QoS가 있는데 적재 적소에 잘 쓰게되면 좋겟다아아 ㅎ