[Swift] GCD 알아보기 3 - DispatchGroup

2024. 1. 11. 11:21· → Swift Study
목차
  1. 지난시간
  2. DispatchGroup
  3. Dispatch WorkItem
  4. Semaphore 
  5. 결론

지난시간

지난시간엔 GCD 종류에 대해서 알아보았다. 메인큐, 글로벌큐, 커스텀큐 이렇게 세종류가 있는데 이러한 것들을 묶을 수 있고, 그 그룹이 끝나는 시점을 알고싶을때 사용하는 것이 DispatchGroup 이다. 아주아주 간단하게 설명할 것이므로 심화학습은 추후 실제 사용해보면서...

 

[Swift] GCD/Operation 알아보기 2 - GCD 종류

지난 포스팅 지난 포스팅에서는 동기, 비동기, 직렬, 동시에 대해서 알아보았다. 그리고 iOS 에서는 작업을 분산시킬 때 Queue 라는 대기행렬에 보낸다는 것까지 알게 되었다. [Swift] GCD/Operation 알아

swift-library.tistory.com

 

DispatchGroup

여러 비동기 작업이 완료될 때까지 대기하거나 완료 되었을때 특정 작업을 실행할 수 있다. 사용방법 자체는 의외로 간단하다. 아래와 같이 DispatchGroup 클래스를 사용하여 그룹을 생성한다. 그리고 async 뒤에 group 에 넣어주면 된다.

 

let groupName = DispatchGroup()

DispatchQueue.global().async(group: groupName) {
    // 비동기 작업 수행
}

DispatchQueue.global().async(group: groupName) {
    // 비동기 작업 수행
}

 

아래와 같이 기다리거나 완료되었을때 실행할 코드도 작성할 수 있다.

groupName.wait()

groupName.notify(queue: DispatchQueue.main) {
    // 모든 작업이 완료된 후 실행
}

 

Dispatch WorkItem

Dispatch WorkItem 이라는 것도 있다. 이건 또 뭐냐 하면 작업을 미리 정의해 놓고, 실행하는 방법이다. 간단한 사용방법은 아래와 같이 아이템을 만들어준다.

let workItem = DispatchWorkItem {
    // 비동기로 실행될 작업
}

 

DispatchQueue 를 사용하여 실행해주면 된다.

// workItem 실행
DispatchQueue.global().async(execute: workItem)

 

작업취소나 지연, 순서 기능도 가능하다. 물론 작업취소는 작업이 안된경우 취소가 되고, 작업이 시작되었다면 isCancelled 속성이 false 가 된다고 한다.

// 작업취소
workItem.cancel()

// 작업지연
workItem.wait()

// 작업순서 지정, workItem 이 끝난 후 workItem2
workItem.notify(queue: DispatchQueue.global(), execute: workItem2)

 

Semaphore 

세마포어라는 것도 있다. 한번에 얼마나 많은 작업을 관리할지를 결정하는 것이다. 최대 몇개의 스레드에서 작업을 할 것인가를 결정한다.

// 동시에 실행할 수 있는 스레드 수 3개
let semaphore = DispatchSemaphore(value: 3)

 

이것을 어떻게 관리하냐면 아래와 같이 .wait(), .signal() 로 갯수를 관리해준다. wait 으로 semaphore 값을 감소시키고, signal 로 semaphore 값을 증가시킬 수 있다. wait 은 3번 쓰고, signal 도 3번 쓸 수있을 것이다. 참고로 defer 은 종료되기 직전에 실행되는 코드다.

DispatchQueue.global().async {
    semaphore.wait()
    defer {
        semaphore.signal()
    }
}

 

결론

와우 DispatchGroup 에 이어서 DispatchWorkItem, Semaphore 까지 알아보았다. 역시 멋진 기능들이 정말 많구나 느꼈고, 하나하나 사용해보면서 자세히 공부해보고 싶다.

'→ Swift Study' 카테고리의 다른 글

[Swift] 약한참조 (weak self) Swift 로 실습해보기  (0) 2024.01.21
[Swift] GCD 알아보기 4 - 동시성 관련 문제  (0) 2024.01.11
[Swift] GCD 알아보기 2 - GCD 종류  (0) 2024.01.09
[Swift] GCD 알아보기 1 - 동기, 비동기, 직렬, 동시, 병렬  (1) 2024.01.08
[Swift] Swift의 convenience init 이해하기  (1) 2023.10.25
  1. 지난시간
  2. DispatchGroup
  3. Dispatch WorkItem
  4. Semaphore 
  5. 결론
'→ Swift Study' 카테고리의 다른 글
  • [Swift] 약한참조 (weak self) Swift 로 실습해보기
  • [Swift] GCD 알아보기 4 - 동시성 관련 문제
  • [Swift] GCD 알아보기 2 - GCD 종류
  • [Swift] GCD 알아보기 1 - 동기, 비동기, 직렬, 동시, 병렬
Swift librarian
Swift librarian
Swift librarian
Swift Library
Swift librarian
전체
오늘
어제
  • 분류 전체보기 (231)
    • 📺 Programming (5)
    • → Architecture (2)
    • → Design Pattern (0)
    • → Computer Science (15)
    • ⚙️ Algorithm (0)
    • → 알고리즘 관련 (22)
    • → Problems (104)
    • 🚀 Project (0)
    • → 알쏭달쏭 (0)
    • → Shook (2)
    • → Solver (8)
    • → Taster (7)
    • → Outline (4)
    • → Pointer (2)
    • → Guesser (3)
    • 🦜 Swift (2)
    • → Swift Archive (12)
    • → Swift Study (12)
    • → Xcode (6)
    • 🧰 Framework (0)
    • → Foundation (1)
    • → UIKit (2)
    • → SwiftUI (3)
    • → CoreData (2)
    • → MapKit (1)
    • → CoreHaptic (1)
    • → User Notification (1)
    • → StoreKit (2)
    • 🏛️ Library (0)
    • → TCA (0)
    • 🐈‍⬛ Git (8)
    • → Git의 원리 (2)
    • → Git 심화 (1)
    • 📦 Other (1)
    • 👦🏻 Log (0)

최근 글

hELLO · Designed By 정상우.v4.2.2
Swift librarian
[Swift] GCD 알아보기 3 - DispatchGroup
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.