[QoS] Quality of Service

Posted by Sung Kyungmo on September 5, 2019

QoS(Quality of Service) 클래스는 DispatchQueue에서 수행 할 작업을 분류합니다. 작업의 품질을 지정하여 앱의 중요도를 나타냅니다. 작업을 스케쥴링 할 때 시스템은 더 높은 서비스 클래스를 가진 작업을 우선시합니다. 우선 순위가 높은 작업은 우선 순위가 낮은 작업보다 더 빠르고 더 많은 자원을 사용하여 수행되므로 일반적으로 우선 순위가 낮은 작업보다 더 많은 에너지가 필요합니다. 앱이 수행하는 작업에 적합한 QoS 클래스를 정확하게 지정하면 앱의 응답성과 에너지 효율을 보장할 수 있습니다.

우선순위

userInteractive > userInitiated > default > utility > background


userInteractive

메인 스레드에서 작업, 사용자 인터페이스 새로 고침 또는 애니메이션 수행과 같이 사용자와 상호 작용하는 작업. 작업이 빠르게 수행되지 않으면 사용자 인터페이스가 정지 된 것처럼 보일 수 있습니다. 응답 성과 성능에 중점을 둡니다.

작업은 거의 즉각적입니다.


userInitiated

이 클래스는 사용자가하고있는 작업에 대한 즉각적인 결과를 제공하거나 사용자가 앱을 사용하지 못하게하는 작업에 할당합니다. 예를 들어, 용자에게 표시하려는 이메일의 컨텐츠를로드 할 수 있습니다. 사용자가 시작한 작업으로 저장된 문서를 열거 나 사용자가 사용자 인터페이스에서 무언가를 클릭 할 때 작업을 수행하는 등의 즉각적인 결과가 필요합니다. 사용자 상호 작용을 계속하려면 작업이 필요합니다. 응답 성과 성능에 중점을 둡니다.

몇 초 또는 그 이하와 같은 작업은 거의 즉각적입니다.


default

기본 서비스 품질 클래스입니다. 이 클래스를 앱이 시작하거나 사용자를 대신하여 활발한 작업을 수행하는 데 사용하는 작업 또는 대기열에 할당합니다. 이 QoS는 개발자가 작업을 분류하는 데 사용되지 않습니다. QoS가 지정되지 않은 작업에 기본값으로 사용되며 GCD global 큐 레벨에서 실행됩니다.


utility

사용자가 적극적으로 추적하지 않는 작업에 대한 서비스 품질 클래스입니다. 완료하는 데 시간이 걸리고 데이터 다운로드 또는 가져 오기와 같은 즉각적인 결과가 필요하지 않은 작업. 유틸리티 작업에는 일반적으로 사용자에게 표시되는 진행률 표시 줄(progress bar)이 있습니다. 응답 성, 성능 및 에너지 효율성 간의 균형을 제공하는 데 중점을 둡니다.

작업에는 몇 초에서 몇 분이 걸립니다.


background

백그라운드에서 작동하며 인덱싱, 동기화 및 백업과 같이 사용자에게 보이지 않는 작업. 에너지 효율에 중점을 둡니다.

작업에는 상당한 시간이 걸리고 몇분이나 몇시간이 필요한 작업


unspecified

서비스 품질 클래스가 없습니다. 이는 QoS 정보가 없음을 나타내며 시스템에 QoS를 유추해야한다는 신호를줍니다. 스레드가 레거시 API를 사용하는 경우 스레드는 지정되지 않은 QoS를 가질 수 있습니다.


참고자료

https://developer.apple.com/library/archive/documentation/Performance/Conceptual/EnergyGuide-iOS/PrioritizeWorkWithQoS.html
https://developer.apple.com/documentation/dispatch/dispatchqos