티스토리 뷰

IOS/swift

[Swift] GCD ( DispatchQueue) 정리

내일도이렇게 2022. 4. 8. 12:11

GCD 

Grand Central Dispatch 로 동시성 프로그래밍을 할 수 있게 해주는 C 기반의 저수준 API 

iOS 에서 DispachQueue 로 처리를 한다. 

 

Sync vs Async 

 

동기

작업을 시작하고 끝날때 까지 기다린다.

메인 스레드에서 작업을 진행한다. 

DispatchQueue.main.sync {
   // 메인 큐에서 동기 방식으로 실행할 코드 
}


DispatchQueue.global().sync {
   // 글로벌 큐에서 동기 방식으로 실행할 코드
}

 

비동기 

작업의 완료를 기다리지 않고 리턴한다. 

메인 스레드에서 다른 스레드에 일을 넘기고 작업 완료까지 대기하지 않는다. 

DispatchQueue.main.async {
   // 메인 큐에서 비동기 방식으로 실행할 코드 
}


DispatchQueue.global().async {
   // 글로벌 큐에서 비동기 방식으로 실행할 코드
}

 

 

Serial VS Concurrent 

 

직렬  큐 

분산처리 시킨 작업을 다른 한 개의 스레드에서 순서가 중요한 작업을 처리할 때 사용 

main queue 가 대표적인 직렬 큐 

 

동시 큐 

분산처리 시킨 작업을 다른 여러 개의 스레드에서 각각 독립적이지만 유사한 여러개 작업을 처리할 때 사용 

global queue 가 대표적인 동시 큐 

 

 

 

GCD 사용시 주의사항 

 

1. UI 관련 일은 메인쓰레드에서 작업을 해야한다. 

DispatchQueue.global().async {
    
    // 비동기적인 작업들 
    
    DispatchQueue.main.async {
        // UI와 관련된 작업
    }
    
}

 

2. 경쟁상황  - 멀티 쓰레드의 환경에서, 같은 시점에 여러개의 쓰레드에서 하나의 메모리에 동시접근하는 문제  

    Thread-Safe 하지 않는다. (Race Condition)

3. 교착상태 - 멀티 쓰레드의 환경에서, 배타적인 메모리 사용으로 일이 진행이 안되는 문제 (DeadLock) 

 

var array = [String]()

// 배열은 여러 쓰레드에서 동시에 접근하면 문제가 생길 수 있다.

let serialQueue = DispatchQueue(label: "serial") // 직렬 큐 생성

for i in 1...20 {
    DispatchQueue.global().async {
        print("\(i)")
        // array.append("\(i)")    //  동시큐에서 실행하면 동시다발적으로 배열의 메모리에 접근
        
        serialQueue.async {       
            array.append("\(i)")  // 직렬 큐에서 배열 접근 
        }
    }
}

 


Reference

https://seons-dev.tistory.com/215

https://velog.io/@sossont/Swift-GCD%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC.   

https://www.inflearn.com/course/%EC%8A%A4%EC%9C%84%ED%94%84%ED%8A%B8-%EB%AC%B8%EB%B2%95-%EB%A7%88%EC%8A%A4%ED%84%B0-%EC%8A%A4%EC%BF%A8/dashboard

 

'IOS > swift' 카테고리의 다른 글

iOS 애플 로그인 연동  (0) 2024.01.21
iOS 구글 로그인 연동  (0) 2024.01.21
[Swift] 클로저와 메모리 관리  (0) 2022.04.06
[Swift] ARC  (0) 2022.04.05
[Swift] Method Dispatch 와 성능 최적화  (0) 2022.04.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함