본문 바로가기
카테고리 없음

Swift GCD 간단한 테스트

by 정석 지향 2022. 12. 20.
반응형

GCD

현재 사용 중인 스레드에서 글로벌 큐로 비동기로 작업을 보내다.

DispatchQueue.global().async {

 

}

 

아래 코드는 실질적으로는 메인스레드에서 실행된다.

DispatchQueue.global().sync {

 

}

 

(1)

DispatchQueue.global().async {

    task1

}

 

(2)

DispatchQueue.global().async {

    tast2

}

 

글로벌큐는 기본적으로 동시 큐이기 때문에 (1), (2) 실행 시 동시적으로 실행된다.

 

(3)

DispatchQueue.global().sync {

    task1

}

 

(4)

DispatchQueue.global().async {

    tast2

}

 

(3), (4) 실행 시 (3)작업이 끝난 후 (4)가 실행된다.

 

let serialQueue = DispatchQueue(label: "Serial1")

 

(1)

serialQueue.async {

    task1

}

 

(2)

serialQueue.async {

    task1

}

 

(1), (2) 실행 시 (1) 번 작업을 비동기를 보냈음에도 시리얼큐이기 때문에 (1)번 작업이 끝난 이후 (2) 번 작업이 실행된다.

 

let serialQueue2 = DispatchQueue(label: "Serial2")

 

(3)

serialQueue.async {

    task1

}

 

(4)

serialQueue2.async {

    task1

}

 

(3), (4) 실행 시 각 실행되는 큐(serialQueue, serialQueue2)가 다르기 때문에 동시적으로 실행된다.

 

DispatchQueue.global().async {

    let serialQueue = DispatchQueue(label: "Serial1")

        serialQueue.async {

            task

        }

 

    let serialQueue2 = DispatchQueue(label: "Serial2")

        serialQueue2.async {

            task

        }

}

 

동시 큐 안에서 시리얼 큐 1,2를 비동기적으로 실행 시 동시에 실행이 된다.

 

헷갈렸던 것 ⇒ 글로벌 동시 큐 안에 시리얼 큐 생성 시

글로벌 동시큐 내부 작업순서대로 실행되며 새로 생성된 시리얼 큐는 개별적으로 실행된다.

반응형