Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
반응형
Archives
Today
Total
관리 메뉴

슈프림 블로그

[iOS] 동시성 프로그래밍 - GCD, Operation 개요 본문

iOS_Swift

[iOS] 동시성 프로그래밍 - GCD, Operation 개요

_슈프림 2020. 12. 5. 17:18
728x90

쓰레드 Thread

동시성 프로그래밍에 대해 공부하기 전에 쓰레드(Thread)에 대해 먼저 알아야 한다.

쓰레드는 간단하게 말하면 "프로그램이 처리해야 할 작업을 하는 녀석"들을 말한다.

쓰레드가 여러개가 있으면 여러 작업을 동시에 처리할 수 있게 된다.

따라서 시간이 오래 걸리는 작업이 여러개 있을 때, 쓰레드 하나에 모든 일을 맡기는 것 보다는

여러개의 쓰레드에 분산 처리를 시키는 것이 효율적이다.

 

그렇다면 작업을 어떻게 다른 쓰레드로 분산시켜 동시에 실행되도록 할까?

이것이 동시성 프로그래밍의 목적이다.

 

 

 

iOS의 동시성 프로그래밍

iOS의 경우, 프로그래머가 직접 스레드를 관리하지 않는다.

작업을 "대기행렬"에 넣어주기만 하면, 적절한 스레드로 분산을 시키는 것은 OS가 알아서 처리해준다!

이렇게 프로그래머가 쓰레드 관리를 직접 하지 않도록 해주는 도구가 바로 GCD이다.

 

iOS는 큐에 작업을 넣게 되면, 들어온 순서대로(FIFO) 적절한 쓰레드에 배치가 된다.

여기서 헷갈리지 말아야 할 것은 : 먼저 들어왔다고 해서 먼저 처리된다는 것은 아니다!!

큐에 작업을 넣는 것개발자가, 큐에 들어온 작업을 쓰레드에 분배하는 것은 OS가 담당한다.

개발자는 스레드보다 상위 레벨에서 작업하는 것이라고 보면 된다.

 

이러한 과정을 거쳐서 오래 걸리는 작업들이 다른 스레드로 분배되어 비동기적으로 동작하게 되는 것이다.

여기서 말하는 "오래 걸리는 작업"은 네트워크 통신과 같은 작업이 대표적이다.

 

 

 

DispatchQueue & Operation Queue

작업을 대기행렬에 넣기만 하면 된다고 했는데, 그 큐의 종류에는 DispatchQueue와 OperationQueue가 있다.

기본적으로 DispatchQueue가 대기행렬의 역할을 하며,

약간의 기능이 더 추가되어 클래스로 만들어진 것이 Operation Queue라고 할 수 있다.

 

Dispatch Queue

- 간단한 작업 처리

- 함수 단위로 묶어서 사용 가능한 수준의 작업

 

Operation Queue

- 복잡한 작업 처리

- GCD(DispatchQueue)를 기반으로 취소 / 순서화 / 일시중지(상태 추적) 등의 기능이 추가된 방식

- 데이터와 기능을 캡슐화하여 객체로 만들어진 작업을 처리함 (재사용성)

 

둘 중 어느것을 선택해야 한다는 정해진 규칙은 없지만, 프로젝트의 효율성과 사례 적합성 등을 판단하여 결정하면 된다.

 

 

 


위 포스팅은 인프런 강의 "iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해 " 를 시청하고 작성한 글입니다.

www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard

반응형
Comments