2021. 11. 29. 19:52ㆍiOS/iOS
이 포스팅은 인프런의 동시성 프로그래밍 강의를 참고하여 제작하였습니다.
안녕하세요 bannavi입니다^ㅅ^
지난 시간에 이어지는 포스팅입니다.
바로 시작할게요 큐 - !
큐(대기행렬, 대기열)에는 크게 두가지가 있습니다.
오늘은 이 둘에 대해서 설명을 해볼게요!
1. GCD (dispatchqueue)
2. Operation (operationqueue)
설명1. 직접적으로 스레드를 관리하지 않고 큐(대기열, 대기행렬)이라는 개념을 이용해 작업을 분산처리한다.
(우리는 큐만 만들어서 그 안에 작업을 넣기만 하면 iOS가 알아서 스레드 2,3,4번을 생성해서 보낸다)
설명2. GCD / Operation을 사용해 시스템에서 알아서 쓰레드 숫자를 관리합니다.
(하드웨어나 일의 부하(load)와 같은 시스템에 대한 지식없이 스레드를 직접 생성하면, 오히려 앱을 느려지게 할 수 있습니다.)
설명3. 스레드보다 더 높은 레벨/차원에서 일을 한다고 보면됌
설명4. 쉽게 다른 스레드에서 (오래걸리는) 작업들이 "비동기적으로 동작"하도록 만들어줌
(어떤 API들은 내부적으로 다른 스레드에서 비동기적으로 실행되도록 설계되어 있음)
그럼 대체 어떻게 큐(Queue)로 보낼까?
DispatchQueue
영어 뜻을 살펴보면 dispatch는 보내다를 의미합니다.
그럼 dispatchqueue는 큐에 보낸다. 를 의미하겠네요
그럼 DispatchQueue.global()은 뭘까요?
네, global queue에 보낼거야라는것을 의미하겠죠? 쉽습니다.
global queue는 생성자이고요.
DispatchQueue.global().async {
}
그럼 이 코드는?
global queue에 비동기적으로 보낼거야. 를 의미합니다.
아하. 그럼 전체적으로 보면 "클로져 안에 있는 작업을 globalqueue에 비동기적으로 보낼거야"가 될 수 있겠네요.
당연히 이렇게 변수를 선언해서 이용하는것도 가능하겠죵!
더 나아가서 async뒤에 붙는 괄호있죠?
즉, 작업의 한 단위에 대해서 더 자세히 살펴보겠습니다. 아래와 같이 task1, 2로 나눠볼 수 있습니다.
오호라. 다른 스레드로 보낼 task를 저런 모양의 괄호안에 배치하는 거구나!
기억해둡시당.ㅎㅎ
이런 작업들을 queue로 보내면 이제 iOS가 다른 스레드로 요렇게 뿅. 보내주는것이죠
다시 정리하겠습니다.
GCD를 보통 dispatchqueue라고 말을 하고,
Operation은 작업을 명명하고,
Operation Queue는 대기열을 말합니다.
그럼 둘의 차이는 뭘까요?
GCD는 보통 클로져로 묶는 여러개의 간단한 작업들을 사용할때 사용합니다(앞에서 살펴본 print문 생각해보기)
Operation큐는 보다 복잡한 일에서 사용합니다. 정확하게 말하면 데이터나 기능을 캡슐화한 객체의 개념인데...
GCD에서 한발 더 나아간 개념이 Operation인것이고요
반대로 말해보면 Operation은 사실 GCD의 개념을 기반으로해서 만들어진 것입니다.
GCD에서 여러가지 비동기 처리 같은 작업을 하니까 아무래도 다른 기능들이 필요하다고 느꼈던것 같습니다.
다른 기능들엔 뭐가 있을까요? task를 취소/ 순서지정/ 일시정지하는것일 수 있습니다.
(tmi. 이 Operation은 2016년도에 애플에서 발표를 한거에용)
아하. Operation은 GCD를 기반으로 하고있고 여러가지 기능을 넣어, GCD에서 발전된 작업이구나.
기억해둡시당.ㅎㅎ
GCD를 써야한다. Operation을 써야한다 이런건 없지만
프로젝트의 효율성이나 사례 적합성 등을 통해서 둘중 하나를 선택해서 쓰면 됩니다.
다만, Operation은 class로 만들어진 객체이기 때문에 한번 class화 해서 만들어보면 재사용화 하기가 편리한 면이 있죠.
더 자세한건 다음 포스팅에서 살펴보겠습니다.^ㅅ^
reference
'iOS > iOS' 카테고리의 다른 글
Concurrency(동시성)프로그래밍에 대해서4 (직렬(Serial)과 동시(Concurrent)의 차이) (0) | 2021.11.29 |
---|---|
Concurrency(동시성)프로그래밍에 대해서3 (동기와 비동기의 차이) (0) | 2021.11.29 |
Concurrency(동시성)프로그래밍에 대해서1(iOS에서의 비동기처리, GCD/Operation에 관하여, GCD/Operation에 앞서서 간단한 정의를 다룸(동기VS비동기, 직렬VS동시, 간단한 GCD/Operation소개)) (0) | 2021.11.29 |
프로젝트의 가독성, 성능을 높이기 위해 시도해봤던 9가지 노력 (0) | 2021.10.28 |
앱을 testflight버전으로 배포해서 테스트 요청하기(feat. 참교육) (2) | 2021.10.22 |