꾸준히 안타치기
Grand Central Dispatch 본문
Grand Central Dispatch (GCD)
Grand Central Dispatch(GCD)는 멀티코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술입니다. 기본적으로 스레드 풀의 관리를 프로그래머가 아닌 운영체제에서 관리하기 때문에 프로그래머가 태스크(작업)을 비동기적으로 쉽게 사용할 수 있습니다. 프로그래머가 실행할 태스크(작업)을 생성하고 Dispatch Queue에 추가하면 GCD는 태스크(작업)에 맞는 스레드를 자동으로 생성해서 실행하고 작업이 종료되면 해당 스레드를 제거합니다.
디스패치 대기열(Dispatch Queue) Dispatch : 신속히보내다, 척척해치우다. Queue: 줄을서다. 대기, 행렬
디스패치 대기열(Dispatch Queue)은 작업을 연속적 혹은 동시에 진행하기는 하지만, 언제나 먼저 들어오면 먼저 나가는 순서로 실행됩니다. Serial Dispatch Queue는 한 번에 하나의 작업만을 실행하며, 해당 작업이 대기열에서 제외되고 새로운 작업이 시작되기 전까지 기다립니다. 이와는 반대로 Concurrent Dispatch Queue는 이미 시작된 작업이 완료될 때까지 기다리지 않고 가능한 많은 작업을 진행합니다. 디스패치 대기열(Dispatch Queue)은 GCD 기술 일부입니다.
디스패치 소스 (Dispatch Source)
디스패치 소스(Dispatch Source)는 특정 유형의 시스템 이벤트를 비동기적으로 처리하기 위한 C 기반 메커니즘입니다. 특정 유형의 시스템 이벤트에 대해 정보를 캡슐화하고, 해당 이벤트가 발생할 때마다 특정 클로저(블록) 객체 혹은 기능을 디스패치 대기열(Dispatch Queue)에 전달합니다. 디스패치 소스(Dispatch Source)는 GCD 기술 일부입니다.
연산 대기열 (Operation Queue)
연산 대기열(Operation Queue)은 Concurrent Dispatch Queue와 동일하게 동작하며, Operation Queue 클래스에 의해 구현됩니다. 디스패치 대기열은 항상 먼저 들어오면 먼저 나가는 순서(FIFO - First in First out)로 작업을 실행하지만, 연산 대기열(Operation Queue)은 작업의 실행 순서를 결정할 때에 다른 요인들을 고려합니다. 연산 대기열(Operation Queue)은 디스패치 대기열(Dispatch Queue)과 매우 유사한 클래스입니다.
GCD와 연산 대기열 (Operation Queue)
- 차이점
- Operation Queue에서는 동시에 실행할 수 있는 연산(Operation)의 최대 수를 지정할 수 있습니다.
- Operation Queue에서는 KVO(Key Value Observing)을 사용할 수 있는 많은 프로퍼티들이 있습니다.
- Operation Queue에서는 연산(Operation)을 일시 중지, 다시 시작 및 취소를 할 수 있습니다.
언제 사용해야 할까요?
- Operation Queue : 비동기적으로 실행되어야 하는 작업을 객체 지향적인 방법으로 사용하는 데 적합합니다. KVO(key Value Observing)를 사용해 작업 진행 상황을 감시하는 방법이 필요할 때도 적합합니다.
- GCD : 작업이 복잡하지 않고 간단하게 처리하거나 특정 유형의 시스템 이벤트를 비동기적으로 처리할 때 적합합니다. 예를 들면 타이머, 프로세스 등의 관련 이벤트입니다.
https://www.boostcourse.org/mo326/lecture/16916?isDesc=false
동기 (synchronous) - 동시에 일어나는 / 비동기(Aysnchronous) - 동시에 일어나지 않는
동기 - 응답을 받고 나서 송신을 한다. (한사람의 말이 다끝나고 말을 시작한다.) |
비동기- 응답여부와 관계없이 다시 전송을 할수 있다. (말이 끝났는지 상관없이 말을 한다.) |
요청과 동시에 결과가 나타난다. 특정함수를 선언해 결과값을 즉시 return받음. |
요청과 동시에 결과가 나타나지 않음. 사용자는 요청을 하고 제어권을 다시 가짐. 해야할일을 요청하고, 기다린다. 요구프로세스를 백그라운드에서 처리한다. 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다. |
설계가 간단하고 직관적이다. | 동기보다 복잡하다. |
결과가 올때까지 대기한다. | 결과가 올때까지 다른 작업을 할 수 있어 효율적이다. |
동기와 비동기를 어떤경우에 사용하나?
분명하게 응답을 받고 진행할경우에 동기를 사용해야한다.
응답 여부에 관계없이 빠르게 진행하려 할때는 비동기를 사용한다.
https://yoo-hyeok.tistory.com/79
'iOS > Basic Study' 카테고리의 다른 글
Notification / 이벤트 전달! /노티피케이션 센터와 노티피케이션 (0) | 2021.12.28 |
---|---|
URL session 예제 / DispatchQueue (0) | 2021.12.28 |
URLSession과 URLSessionDataTask (0) | 2021.12.27 |
OperationQueue (0) | 2021.12.26 |
tableView +Json 데이터 파싱 (0) | 2021.12.23 |