-
[사전캠프 TIL 5일차] GCD (+α), OperationiOS💖 2025. 2. 7. 20:07
학습 키워드
🗂️ GCD 더 상세하게! ➡️ Thread-safe / unsafe 설계
제네릭
비동기 (동시성) 프로그래밍
- iOS 에서 task 요청에 대해, 코드에서 별도의 처리를 하지 않았다면
모든 task는 Main Thread 에서 수행된다.
- 해결 ➡️ 선입선출로 처리되는 Queue (= 대기 행렬) 에 넣는 것이다.
- DispatchQueue는 iOS 에서의 Queue
(Dispatch 뜻 : (특별한 목적을 위해) 보내다 〰️ 큐에 보내다 !)
- DispatchQueue는 iOS 에서의 Queue
- 해결 ➡️ 선입선출로 처리되는 Queue (= 대기 행렬) 에 넣는 것이다.
- DispatchQueue 에 task 를 추가하면, GCD가 알아서 task 에 맞는 thread 생성/실행/제거
- 필요성
- 시간 절약
- 사용
- 대부분의 사용: 서버와의 통신
- 네트워크 관련 작업들은 내부적으로 이미 비동기적으로 구현 되어있다.
(내부적으로 다른 스레드 사용 + 비동기적 구현)
- 네트워크 관련 작업들은 내부적으로 이미 비동기적으로 구현 되어있다.
- 대부분의 사용: 서버와의 통신
❤️ GCD (Grand Central Dispatch)
- DispatchQueue에 추가된 작업에 대해, 알맞는 thread 를 생성&실행, 작업종료시 제거
- sync: task 를 큐에 보내고 ➡️ 큐에보낸 task 끝날 때 까지 기다렸다가 ➡️ 완료 후, 다음 task 실행
async: task 를 큐에 보내고 ➡️ 보낸 task 완료 유무 상관 ❌ ➡️ 바로 다음 task 실행 - Main Thread 코드 예시)
- Main Thread 의 입장
- task1 을 만났다 ➡️ queue로 보낸다 ➡️ async 이니 task1 완료 유무 상관 없이 ➡️ task2 실행
- task2 을 만났다 ➡️ queue로 보낸다 ➡️ async 이니 task1, 2 완료 유무 상관 없이 ➡️ task3 실행
- task3 을 만났다 ➡️ queue로 보낸다 ➡️ async 이니 task1, 2, 3 완료 유무 상관 없음 ➡️ 끝
- Main Thread 의 입장
let queue = DispatchQueue.global() queue.async { // task1 } queue.async { // task2 } queue.async { // task3 }손 정리
Operation
- 내부적으로는 GCD 위에서 동작
- GCD + 더 추가된 기능
- 동시 실행할 수 있는 동작의 최대 수 지정
- 동작 일시정지 / 취소
- Operation 에서 사용하는 Queue : Operation Queue
- 단점 : 구현 복잡함
회고
비동기 프로그래밍이란? 으로 부터 시작해서, 여기까지 왔다.
아직 더 직렬, 동시 큐에 대해 공부해야한다.
깊이 더 자세히 알게 되는 것이 재밌는 것 같다.
출처
[iOS] 차근차근 시작하는 GCD — 1
이번엔 제발 이해하고 싶다 GCD..🥂
sujinnaljin.medium.com
[iOS] 차근차근 시작하는 GCD — 2
GCD와 Operation에 대해 알아봅시다
sujinnaljin.medium.com
https://www.inflearn.com/news/40327
왜 UI를 메인쓰레드에서 업데이트 할까? - 인프런 | 강의 공지사항
안녕하세요. 오랜만에 새소식으로 인사드리네요. 다름이 아니오라, 왜 UI를 메인쓰레드에서 업데이트 해야할까? 라는 질문에 대한 좋은 글이 있어, 해석본을 만들게 되었고 공유해 드리려고 합
www.inflearn.com
https://developer.apple.com/documentation/dispatch/dispatchqueue
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
'iOS💖' 카테고리의 다른 글
[사전캠프 TIL 7일차] GCD (DispatchQueue 종류 & 특성) (0) 2025.02.13 [사전캠프 TIL 6일차] GCD (Serial vs. Concurrent) (0) 2025.02.12 [사전캠프 TIL 4일차] 비동기 프로그래밍 (with. GCD 💝) (2) 2025.02.06 [사전캠프 TIL 3일차] ARC / 클로저 / OOP (1) 2025.02.05 [사전캠프 TIL 2일차] 자료구조 / 메모리 구조 (2) 2025.02.04 - iOS 에서 task 요청에 대해, 코드에서 별도의 처리를 하지 않았다면