Global DispatchQueue 의 Qos 에는 어떤 종류가 있고 각각 어떤 의미일까?

zeke·2021년 7월 10일
2

iOS

목록 보기
2/2
post-thumbnail
post-custom-banner

질문에 대한 답은 애플공식문서에서 찾을 수 있었다.
https://developer.apple.com/documentation/dispatch/dispatchqueue/2300077-global
https://developer.apple.com/documentation/dispatch/dispatchqos/qosclass

애플공식문서를 바탕으로 번역한 글입니다. (오역된 부분이 있을 수 있습니다😀)

1. global(qos:) 메소드

DispatchQueue타입에 global(qos:) 라는 타입메소드가 있습니다.

Returns the global system queue with the specified quality-of-service class.

말 그대로 지정된 qos클래스가 있는 global system queue를 반환한다고 합니다.

1-1. Declaration

class func global(qos: DispatchQoS.QoSClass = .default) -> DispatchQueue

반환타입은 DispatchQueue입니다. 디폴트값이 존재하네요.

1-2. Parameters

The quality-of-service level to associate with the queue. This value determines the priority at which the system schedules tasks for execution. For a list of possible values, see DispatchQoS.QoSClass.

파라미터로 오는 QosClass값에 따라 시스템이 실행할 작업의 우선 순위를 결정합니다. 가능한 값의 목록들은 DispatchQueue.QosClass를 참조하세요. QosClass의 종류는 밑에서 설명하겠습니다.

1-3. Discussion

이 메소드는 지정된 QoS로 작업을 실행할 queue를 반환합니다. suspend(), resume() 및 dispatchset_context(:_:) 함수에 대한 호출은 반환된 queue에 영향을 주지 않습니다.

Tasks submitted to the returned queue are scheduled concurrently with respect to one another.

반환된 queue에 제출된 작업들은 동시에 스케쥴(예약)됩니다.
이 문장은 큐에 쌓인 작업들은 concurrently하게 여러 스레드에서 실행된다는 의미같네요

2. DispatchQos.QosClass

Quality-of-service classes that specify the priorities for executing tasks.

작업 실행을 위한 우선순위를 지정하는 QoS클래스입니다.

2-1. Declaration

enum DispatchQoS.QoSClass

2-2. Overview

QoS클래스를 사용하여 앱이 수행하는 작업의 의도를 전달할 수 있습니다. 시스템은 이러한 의도를 사용하여 사용가능한 리소스를 이용하여 작업들을 실행하는 최상의 방법을 결정합니다.

예를들어,

  • 시스템은 user-interactive 작업이 포함된 스레드에 높은 우선순위를 부여하여 작업이 빠르게 실행되도록 합니다.
  • 이와 반대로 백그라운드 작업은 우선순위가 낮으며 전력 효율이 좋은 CPU코어에서 실행하여 전력 절약을 시도할 수 있습니다.
  • 시스템은 시스템의 조건과 스케줄링된 작업에 따라 동적으로 작업을 실행하는 방법을 결정합니다.

3. Getting the Quality-of-Service Class

Case1: userInteractive

The quality-of-service class for user-interactive tasks, such as animations, event handling, or updating your app's user interface.

애니메이션, 이벤트 처리 또는 앱의 UI업데이트와 같은 user-interactive작업에 대한 QoS입니다.

Discussion

User-interactive작업은 시스템에서 가장 높은 우선순위를 가집니다. 사용자와 상호작용하거나 앱의 UI를 업데이트하는 작업이나 큐를 사용하려면 이 클래스를 사용합니다.

Case2: userInitiated

The quality-of-service class for tasks that prevent the user from actively using your app.

사용자가 앱을 능동적으로 사용하는 것을 방지하기위한 QoS클래스입니다.
이게 무슨말인지 전혀 이해하지 못해 다른 개발자분의 블로그를 참조하였습니다. 이 QoS는 유저가 무언가를 클릭했을 때 곧장 일을 처리하도록 하는 옵션이라고 합니다.

Discussion

User-initiated 작업은 시스템에서 user-interactive작업 다음으로 중요합니다. 작업에 이 클래스를 할당함으로서 사용자가 수행하는 작업에 대해 즉각적인 결과를 제공하거나 사용자가 앱을 사용할 수 없도록 합니다. 예를들어 이 QoS클래스를 사용하여 사용자에게 표시하려는 이메일의 내용을 불러올 수 있습니다.

Case3: default

The default quality-of-service class.

Discussion

default는 user-interactive나 user-initiated보다 우선순위가 낮지만 유틸리티나 백그라운드 작업보단 우선순위가 높습니다. 앱이 시작할 때 혹은 사용자를 대신하여 active work을 수행하는데 사용하는 큐나 작업에 이 클래스를 할당합니다.

Case4: utility

The quality-of-service class for tasks that the user does not track actively.

Discussion

utility 작업들은 앞서 말한 QoS보단 우선순위가 낮지만 background보단 높습니다. 사용자가 앱을 계속 사용할 수 있도록 차단하지 않는 작업에 대해 이 QoS클래스를 할당하세요.
예를 들어, 사용자가 별로 관심없고 긴 시간이 소요되는 작업에 대해 이 클래스를 할당 할 수 있습니다.

Case5: background

The quality-of-service class for maintenance or cleanup tasks that you create.

Discussion

백그라운드 작업의 우선순위는 가장 낮습니다. 앱이 백그라운드 상태에 있는동안 수행하는데 사용되는 작업이나 DispatchQueue들에게 이 클래스를 할당합니다.

Case6: unspecified

The absence of a quality-of-service class.

QoS정보가 없음을 시스템에 신호를 줍니다.



정리

글로벌 큐 내에서 작업마다의 특성을 이 QoS클래스를 통해 정할 수 있다.
QoS클래스는 user-interactive, user-initiated, default, utility, background, unspecified가 있고 이는 중요도 순으로 나열한 것이다.
시스템이 리소스를 재할당하여 우선순위가 높은 작업을 더 빨리 수행할 수 있도록 한다.
이를 사용하는 이유는 결국 전력 효율을 높이고 반응성도 높아지게 하기 위함이다.

profile
iOS & Swift
post-custom-banner

0개의 댓글