iOS - QoS란?

hanni66·2022년 10월 29일
2

iOS

목록 보기
3/5
post-thumbnail

서론

GCD를 확실하게 이해하고자 QoS에 대해 알아보고 싶었다. 언제나 개념 공부는 너무 어렵다.. 그래도 쌓이고 쌓이다보면 나에게 큰 도움이 된다는 것을 너무 잘 알기에 .. 힘내서 더 깊게 공부를 해야겠다. DispatchQueue의 내용 중 Global Queue경우 QoS클래스를 지정해 우선순위 설정이 가능하다고 하는데, 'QoS가 뭔데?'라는 궁금증을 가지고 이 글을 쓰게 되었다.

QoS(Quality of Service)

QoS는 서비스의 품질을 말한다. QoS를 정의하면 DispatchQueue의 작업을 우선적으로 분류하는데 도움이 된다.

개발자는 중요도에 따라 앱 작업을 분류해 시스템의 우선 순위를 보다 효과적으로 지정할 수 있습니다. 최적의 시간까지 작업을 연기하는 것과 비슷하게 다른 효율성 조치를 구현한 경우에도 시스템은 여전히 일정 수준의 우선 순위를 수행해야 된다. 그렇기 때문에 앱이 수행하는 작업을 분류하는 것은 중요하다.

QoS의 class정보

서비스 품질 (QoS) 클래스를 사용하면 수행할 작업을 NSOperation, NSOperationQueue, NSThread개체, 디스패치 대기열 및 pthread(POSIX 스레드)로 분류할 수 있다. 작업에 QoS를 할당하여 중요도를 표시하면 시스템에서 우선 순위를 지정하고 그에 따라 일정을 잡게 된다.

예를 들어, 시스템은 사용자가 시작한 작업을 최적의 시간까지 연기할 수 있는 백그라운드 작업보다 더 빨리 수행한다. 경우에 따라 시스템 리소스는 우선 순위가 낮은 작업에서 다시 할당되어 우선 순위가 높은 작업으로 할당될 수 있다.

우선 순위가 높은 작업은 우선 순위가 낮은 작업보다 더 많은 리소스를 사용하여 더 빠르게 수행되기 때문에 일반적으로 우선 순위가 낮은 작업보다 더 많은 에너지가 필요하다. 앱이 수행하는 작업에 적절한 QoS 클래스를 정확하게 지정하면 앱의 응답성과 에너지 효율성이 보장된다.

QoS의 사용

.async() 함수와 함께 사용할 수 있으며 우선 순위는 4개로 나뉘게 된다.

  • userInteractive: 애니메이션 또는 UI 업데이트에 사용된다.
  • userInitiated: API에서 데이터를 로드하는 것과 같은 작업에 사용하여 사용자가 상호 작용하지 못하도록 한다.
  • 유틸리티: 사용자가 추적할 필요가 없는 작업에 사용된다.
  • background: 로컬 데이터베이스에 데이터를 저장하거나 우선 순위가 높지 않은 유지 관리 코드와 같은 작업에 사용된다.

즉, DispatchQueue를 사용하는 동안 코드를 분류해 개발중인 앱이 에너지 효율성이 보장되도록 한다.

작업을 분류하면 시스템은 리소스 가용성에 따라 가능한 최선의 방법으로 작업을 처리한다. 또 주의할 점은 유틸리티와 배경이 다른 것보다 우선순위가 낮기 때문에 코드를 추론하고 필요에 따라 모두 사용해야 한다는 것이다.

부주의하게 사용하면 앱이 스레드 폭발 및 교착 상태에 직면하게 되기 때문에 이러한 경고를 나타낸다.

결론

에너지를 효율적으로 사용하기 위해 빠른 수행이 필요한 작업과 그렇지 않은 작업을 나누어 처리하는 데에는 QoS가 필요하다고 생각한다.
하지만 코드에서 직접적인 사용은 아직 와닿지 않아서 다음엔 코드와 같이 보며 개념을 이해하고 싶다.

참고

https://developer.apple.com/documentation/dispatch/dispatchqos
https://developer.apple.com/library/archive/documentation/Performance/Conceptual/EnergyGuide-iOS/PrioritizeWorkWithQoS.html#//apple_ref/doc/uid/TP40015243-CH39-SW1
https://www.swiftpal.io/articles/what-is-qos-quality-of-service-in-gcd-swift

0개의 댓글