이번에 기초 이론도 어느정도 공부도 했겠다, 간단한 개인 플젝을 제작중입니다.
java공부때도 멀티스레팅을 사용해본 바, 해당 기능을 넣으면서 공부한 내용을 정리해 보았습니다.
우선 GCD에 대해 공부하기 전, 알아둬야할 개념들이 있습니다.
프로세스란 하나의 프로그램이 메모리에서 실행되는 작업단위 입니다.
그리고 스레드는 프로세스의 작업흐름의 단위입니다.
멀티 스레딩이 된다는 것은, 한 프로세스가 여러 스레드를 사용하는 것이죠 :)
멀티 스레딩에 관련해서 몇가지 프로그래밍 방식이 있습니다.
1. 동시성 프로그래밍
아주 재밋는 친구입니다.
사실 하나의 cpu가 큐에 넣은 작업순서대로 처리합니다. 다만 CPU의 연산처리가 빨라
여러가지 작업이 한번에 되는것같아 보일 뿐 입니다 ㅎ.
2. 병렬성 프로그래밍
복수의 CPU를 사용해 여러 작업을 동시에 진행합니다.
3. 동기/비동기 프로그래밍
동기 프로그래밍은 작업을 순차적으로 처리합니다.
하나의 작업이 완료가 되야 다음 작업을 처리할 수 있습니다.
반면, 비동기 프로그래밍은 작업의 종료를 기다리지 않고 다음작업을 처리합니다.
이미지나 파일을 다운받으면서 웹 서핑을 하는 것 처럼요 ㅎㅎ
Swift가 지원하는 병렬 프로그래밍 방식은 세가지입니다.
1. Thread (구 NSThread)
2. GCD
3. NSOperation Queue
Thread는 사용자가 직접 스레드풀을 관리하는 전통적인 방식입니다.
java가 익숙한 터라 Thread를 사용해서 시도해볼려고 했는데.. 이게 웬걸,
구글링해보니 자료량도 너무 적고 기간도 다 오래됬더군요.
왜 그런가 봤더니, Dispatch Queue를 사용해 구현하는게 엄청 쉽고 간결하더군요.
스레드풀은 시스템이 관리하고, 저는 작업을 큐에 넣고 결과를 받기만 하면 됩니다.
그럼 후보군이 둘이 남았군요!
GCD와 Operation Queue의 차이는 뭘까요?
단순하게 말하자면 GCD는 저수준이고 NSOperation Queue은 고수준이라고 말할 수 있습니다.
NSOperation Queue는 GCD 기반으로 실행되지만, GCD보다 훨씬 많은 제어방식이 있습니다.
비교적 간단한 작업은 GCD로, NSOperation Queue는 스레드간 종속성 관리가 필요한 다소 복잡한
작업에 사용하면 적절할 것 같습니다.
사실 ios8 및 macOS 10.10 미만의 GCD는 예약한 작업의 취소도 불가능했습니다.
그러나 DispatchWorkItem이 도입되서 간단한 조작으로 작업을 제어할 수 있게 되어서
엄청 복잡한 작업이 아니라면 GCD의 사용이 가능해졌다고 합니다. ㅎ
저는 그리 복잡한 작업을 수행게 아니기에 GCD를 사용해 플젝을 구현해 보도록 하겠습니다.
다음글에선 GCD에 대해 조금 더 자세히 알아보도록 하겠습니다.
학습에 도움이 된 사이트들
GCD vs Operation Queue
stackoverflow.com/questions/7078658/operation-queue-vs-dispatch-queue-for-ios-application
'Language > Swift' 카테고리의 다른 글
Swift GCD(Grand Central Dispatch) [3] - 예제 사용해보기 (0) | 2021.03.22 |
---|---|
Swift GCD(Grand Central Dispatch) [2] - DispatchQueue (0) | 2021.03.22 |
Swift 서브스크립트 (Subscripts) (0) | 2021.03.21 |
Swift 제네릭 (Generic) (0) | 2021.03.19 |
Swift 프로토콜 지향 프로그래밍 (POP) (0) | 2021.03.17 |