본문 바로가기
앱/iOS(Swift)

[스위프트] Global DispatchQueue 의 Qos

by 리드맥 2022. 1. 12.
  • QoS: quality of service,우선순위를 정한다.
    적절하게 QoS를 지정하면 앱의 에너지 효율이 좋아진다
    • userInteractive
      메인 스레드에서 작업하거나 사용자 인터페이스를 새로 고치거나 애니메이션을 수행하는 등 사용자와 상호 작용하는 작업 (ex: 중요도 높고 즉각적인 방응이 요구되는 작업, 즉각적으로 작업이 처리)
    • userInitiated: 사용자가 시작한 작업으로 저장된 문서를 열거나 사용자가 사용자 인터페이스에서 무언가를 클릭 할 때 작업을 수행하는 등 즉각적인 결과가 필요할 때 사용, (ex: 빠른 결과를 기대할때 사용)
    • default: 기본값
    • utility: 완료하는데 시간이 조금 걸리고 데이터 다운로드 또는 가져오기와 같이 즉각적인 결과가 필요하지 않은 작업 (ex: 계산, I/O, 네트워킹등 시간이 다소 오래걸리는 작업)
    • background: 인덱싱, 동기화 및 백업과 같이 백그라운드에서 작동하고 사용자에게 표시되지 않는 작업
      (ex: 유저가 인지하지도 못하는 뒷단에서 실행되는 작업
  •   let dispatchGroup = DispatchGroup()
    let queue3 = DispatchQueue(label: "q3", qos: DispatchQoS.default)
    queue3.async(group: dispatchGroup){
        dispatchGroup.enter()//작업시작
        DispatchQueue.global().async {
            for index in 20..<30 {
                Thread.sleep(forTimeInterval: 0.3)
                print(index)
        }
            dispatchGroup.leave()//작업끝 이거 쓰지않으면
            //끝난줄 모르기 때문에 dispatchGroup.notify(queue: DispatchQueue.main) 이 실행되지 않는다
        }
        }
    
    dispatchGroup.notify(queue: DispatchQueue.main) {
    print("끝")

댓글