Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Global DispatchQueue 의 Qos 에는 어떤 종류가 있는지, 각각 어떤 의미인지 설명하시오. #21

Closed
hyesuuou opened this issue Nov 19, 2021 · 4 comments
Assignees
Labels

Comments

@hyesuuou
Copy link
Member

No description provided.

@hyesuuou hyesuuou added the iOS label Nov 19, 2021
@hyesuuou hyesuuou self-assigned this Nov 19, 2021
@dlwns33
Copy link
Member

dlwns33 commented Nov 21, 2021

Global DispatchQueue는 전체 시스템에서 공유되는concurrent queue 이다. (작업을 여러개의 스레드로 보낼 수 있다)
동시에 진행되기 때문에 QoS(Quality of Service)를 통해서 작업의 우선순위를 결정하게 된다.

// 유저와 직접 인터렉티브 : UI관련 (즉시)
DispatchQueue.global(qos: .userInteractive)

// 반드시 필요, 비동기 처리 : 앱 내에서 첨부파일을 열기, 내부 데이터베이스 조회 등 (몇초)
DispatchQueue.global(qos: .userInitiated)	

// 일반적인 작업
DispatchQueue.global()	

// ProgressIndicator와 함께 길게 사용되는 작업 : 지속적인 데이터 feed, Networking (몇초~몇분)
DispatchQueue.global(qos: .utility)	

// 사용자가 직접적으로 인지하지 않는 부분 : 데이터베이스 유지 등 (속도보다는 에너지 효율성 중시)
DispatchQueue.global(qos: .background)

// 사용하지 않음 legacy API
DispatchQueue.global(qos: .unspecified)

@heerucan
Copy link

QoS (Quality-of-service)는 원래 네트워크에서 사용하는 용어로 서비스의 중요도에 따라
중요한 서비스에 더 많은 자원을 할당하는 것, 또는 이 중요도를 뜻하며
적절하게 QoS를 지정하면 앱의 에너지 효율이 좋아진다.

enum DispatchQoS.QoSClass 이라 다양한 case가 존재한다.

userInteractive : 메인 스레드에서 작업하거나 사용자 인터페이스를 새로 고치거나 애니메이션을 수행하는 등 사용자와 상호 작용하는 작업
(즉시 작업)

userinitiated : 사용자가 시작한 작업으로 저장된 문서를 열거나 사용자가 사용자 인터페이스에서 무언가를 클릭 할 때 작업을 수행하는 등 즉각적인 결과가 필요할 때 사용 / 비동기적으로 처리할 작업 / 사용자와 상호작용
(몇 초)

default : 기본값 / QoS가 할당되지 않은 작업이 이에 해당

utility : 완료하는데 약간의 시간이 걸리고 데이터 다운로드 또는 가져오기와 같이 즉각적인 결과가 필요하지 않은 작업 / 대개 UI에 이와 관련된 프로그래스바를 통해 볼 수 있음
(몇 초 ~ 몇 분)

background : 인덱싱, 동기화 및 백업과 같이 백그라운드에서 작동하고 사용자에게 표시되지 않는 작업
-> 데이터베이스 가져오기 및 유지
(분 ~ 시간, 상당한 시간)

unspecified : QoS정보가 없음 / 환경 QoS(environmental QoS)를 추론해야 한다는 단서를 시스템에 제공

@Taehyeon-Kim
Copy link
Contributor

Global Queue를 생성할 때 QoS(서비스 품질)을 지정해줄 수 있다. QoS는 6가지의 종류가 있다. iOS는 QoS에 따라 알아서 중요한 일의 순서를 결정하고, 쓰레드의 우선 순위를 매겨 작업을 분배한다. 우선 순위에 따라서 분배되는 쓰레드 수와 배터리 집중도가 달라지게 된다.

  • userInteractive : 애니메이션, 이벤트 처리 또는 UI 업데이트 등
  • userInitiated : 유저가 무언가를 클랙했을 때 곧장 일을 처리하도록 하는 옵션
  • default : 앱이 시작할 때 혹은 사용자를 대신하여 active work을 수행하는데 사용하는 큐나 작업에 클래스 할당
  • utility : 사용자가 앱을 계속 사용할 수 있도록 차단하지 않는 작업 (사용자가 관심없거나 긴 시간이 소요되는 작업)
  • background : 앱이 백그라운드 상태에 있는동안 수행하는데 사용되는 작업
  • unspecified : QoS 정보가 없음을 시스템에 신호를 줌

@hyesuuou
Copy link
Member Author

Global DispatchQueue 는 중요도를 표시하기 위해 Qos (Quality of Service) 를 제공한다. 이를 이용하여 작업의 우선순위를 결정하게 된다. (작업이 끝나는 시간과는 관계없다.)
Qos에는 다음과 같이 6가지의 종류가 있다.

  1. userInteractive - 바로 수행되어야 할 것(가장 중요)
  2. userInitialted - userInteractive보단 덜 중요하지만, 사용자가 기다리고 있는 것
  3. default - 우선 순위를 신경쓰지 않는 것 (중요도가 상관없는 것)
  4. utility - 시간이 좀 오래 걸리는 것
  5. background - 사용자한테 당장 인식될 필요가 없는 것
  6. unspecified

가장 먼저 일어나야 하는 중요한 일이라면 userInteractive를 써야한다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants