-
Swift Thread 처리에 대해 (Operation Queue vs Dispatch Queue)Swift 2021. 7. 7. 11:05
Thread 처리의 기본 개념
Serial(직렬) vs Concurrent (병렬) / sync(동기) vs async (비동기)
Serial은 직렬, 앞 작업이 끝날때까지 뒤 작업을 실행하지 않죠.
Concurrent 병렬적으로 여러개의 작업을 동시에 실행해요 여기서 하나, 먼저온 작업을 순서대로 실행한다는것입니다. 단지 동시에 여러개를 실행, 하나의 작업이 끝날때까지 기다리지 않는것이다.
Sync 해당 작업이 끝날때까지 기다린다.
Async 해당 작업이 하는 동안 다른걸 할 수 있다.
같은듯 다르게 들리는 두 개념은
Serial 과 Concurrent는 Thread의 수와 관련된 개념이고
Async와 Sync 는 Thread 위의 작업 흐름을 말한다고 보면됩니다.
-> 직렬인데 비동기일수 있고, 병렬인데 동기일 수 있다.
즉. 직렬과 병렬은 한번에 하나만 처리하는지 여부인거고
동기와 비동기는 처리가 끝날때까지 기다리냐 기다리지 않느냐 인거다.
그럼 멀티 쓰레드를 함 처리해보자.
GCD
GCD에 대한 내용은 아래 정리해두었습니다.
위 설명을 참고하여, Cocoa에서 두개의 Queue를 지원하는데 그게 main과 global 각각이 위에 설명한 시리얼 큐 / 글로벌 큐 입니다.
그 큐의 메소드중 sync, async 이렇게 있음.
작업이 처리되는 동안 기다리는 sync는 앱이 렉걸린것 처럼 보이니까 잘 사용하지 않는다.
Operation Queue와 Dispatch Queue
바로 위의 부분이 이 글을 작성하게 된 계기인데요, 둘의 차이점이 뭘까요?
우선 Operation Queue를 사용할때 https://kkimin.tistory.com/30 이렇게 살짝 정리를 하긴 했었다.
일단, Operation Queue는 Concurrent Dispatch Queue와 동일하게 동작하는데, dispatch는 FIFO 로 작업을 실행하지만 operation은 작업의 순서를 결정할때 다른 요인을 고려한다.
그리고 각각 Operation Queue는 objective -c 기반 Dispatch Queue는 C기반이다. NSOperation이 오버헤드가 더 발생하고 느리다. 그러나 아래와 같은 기능이 있다.
Operation Queue는
- 동시에 실행할 수 있는 연산의 최대 수를 지정할 수 있고
- KVO를 사용할 수 있는 프로퍼티가 있다.
- 연산 일시중지, 취소, 재개 가능
728x90'Swift' 카테고리의 다른 글
Swift Swizzling (0) 2021.07.16 Swift Async / Await (0) 2021.07.09 URL Session 에 대해서 (0) 2021.07.06 Swinject 사용, DI란? (0) 2021.06.30 xcode 오류 nw_connection_copy_protocol_metadata [C20] Client called nw_connection_copy_protocol_metadata on unconnected nw_connection (0) 2021.06.29