GCD는 동시성 프로그래밍을 위해 Apple이 제공하는 API이다. (iOS 8부터 지원)
GCD는 DispatchQueue를 이용하여 작업을 분산처리한다.
개발자가 스레드를 생성하는 작업 없이 DispatchQueue라고 이름 붙여진 Queue에 작업을 보내기만 하면
DispatchQueue가 알아서 여러 스레드로 작업을 분산시킨다.
DispatchQueue를 번역해보면
dispatch가 보내다, 발송하다의 의미를 가지고 있으므로
큐로 보내다 라는 의미이다. 매우 직관적!
그림으로 보기!!
개발자는 스레드를 신경쓸 필요 없이 DispatchQueue에 Task를 보내기만 하면,
DispatchQueue가 알아서 (특성에 맞게) 작업을 여러 스레드로 분산한다.
동시성 프로그래밍?
예를 들어 네이버 (https://www.naver.com) 홈페이지에 접속을 했다.
홈페이지에 나오는 데이터들은 텍스트부터 시작해서, 이미지, 날씨 등 여러가지 정보를 서버로부터 불러오는 과정이 필요하다.
만일, 홈페이지에 필요한 데이터들을 불러와서 띄우는 과정을 하나의 스레드에서만 진행한다면
(모든 데이터를 다 불러온 후에 화면에 띄워주는 작업)
10초간 우리는 빈 화면을 보고 있어야 할 것이다.
그렇다면 사용자에게 큰 불편을 줄 것인데,
네이버 홈페이지에서 10초간 빈 화면을 보여주지 않는다. (인터넷 연결이 원활하다는 가정 하에)
어떻게 한 것일까?
눈치 채지 못했겠지만, (나는 그랬다.)
데이터 로딩이 오래 걸리는 이미지를 보여주는 작업 같은 경우
기존에 빈 화면이었다가 몇 초 후에 이미지가 뜬다.
비교적 빠른 로딩이 가능하거나 데이터 변경이 필요없는 타이틀(메일, 카페, 블로그 등)부터 먼저 보여주게 되므로
사용자는 빈 화면을 보지 않아도 되는 것이다.
이런 작업은 여러 스레드에서 진행된다.
예를 들어 스레드1에서는 로딩이 필요 없는 데이터들을 보여주고,
동시에 스레드2에서는 메인 배너 이미지를 다운로드하고,
스레드3에서는 쇼핑 배너 이미지를 다운로드하고 있는 것이다.
그렇다면 여러 스레드에서 분산 처리를 통해 작업을 효율적으로 진행할 수 있음을 알았다.
GCD를 통해서,
개발자가 스레드를 조작하는 작업 없이
DispatchQueue라고 이름 붙여진 Queue에 작업을 보내기만 하면
DispatchQueue가 알아서 여러 스레드로 작업을 분산시킨다.
참고
https://developer.apple.com/documentation/DISPATCH
Dispatch | Apple Developer Documentation
Execute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.
developer.apple.com
https://developer.apple.com/documentation/dispatch/dispatchqueue#3136752
DispatchQueue | Apple Developer Documentation
An object that manages the execution of tasks serially or concurrently on your app's main thread or on a background thread.
developer.apple.com
https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard
iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션
동시성(Concurrency)프로그래밍 - iOS프로그래밍에서 필요한 동기, 비동기의 개념 및 그를 확장한 GCD 및 Operation에 관한 모든 내용을 다룹니다., - 강의 소개 | 인프런
www.inflearn.com
'iOS > Swift' 카테고리의 다른 글
Swift 문법 ;; stride(from:through:by:) / stride(from:to:by:) (0) | 2023.03.16 |
---|---|
Swift ;; GCD #3 Sync 사용 시 주의할 점 (0) | 2023.03.15 |
Swift ;; GCD #2 Async와 Sync (0) | 2023.03.14 |
Swift ;; Stack 구현! (0) | 2023.02.09 |
Swift ;; Queue 구현! (0) | 2023.02.09 |