[Swift] Concurrency

Ryan (Geonhee) Son·2021년 6월 28일
0

Study Stack

목록 보기
23/34

  1. Concurrency는 무엇인가?
    동시에 하나 이상의 작업이 수행되는 것을 이릅니다. 작업은 목적을 이루기 위한 명령의 집합으로, 이미지를 다운로드하거나 테이블을 리프레시하는 것을 예로 들 수 있습니다.

  2. 왜 Concurrency를 사용하는가?
    User interface를 responsive하게 유지하기 위해서 사용합니다. Concurrency를 통해 table View가 이미지 다운로드나 변형 작업으로 인해 원활히 스크롤 되지 않는 문제를 해결할 수 있습니다.

  3. 어떻게 Concurrency를 사용할 수 있는가?
    앱을 구조화하여 일부 작업이 안전하게 동시에 수행될 수 있도록 합니다. 리소스가 thread safe하지 않다면 동일한 리소스를 수정하는 작업을 동시에 수행하지 않도록 합니다. 다른 리소스를 사용하거나 프로퍼티를 읽는 작업만을 수행한다면 안전하게 작업을 동시에 수행할 수 있습니다. GCD와 Operation을 통해 어떤 작업을 수행할 것인지 시스템에게 알려줄 수 있습니다.

GCD

Grand Central Dispatch(GCD)는 C언어로 작성된 lib dispatch library의 이름입니다. Swift3에서 일반적인 Swift class처럼 사용할 수 있게끔 문법을 업데이트하였습니다.

GCD는 5개의 global dispatch queues를 제공합니다. GCD queues는 threads에서 작동됩니다. Programming threads는 복잡하지만 Dispatch queues는 이를 추상화하여 복잡성을 감추고 있습니다. Queue에 들어가면 선입선출 (First-In-First-Out) 원칙이 지켜집니다. 작업이 도착한 순서대로 시작된다는 것입니다. 하지만 global queues에서 수행된 작업의 종료 순서는 다를 수 있습니다. Global queues는 concurrent하기 때문입니다.

Operations

Operations는 dispatch queues에 객체 지향의 편의성을 더한 것입니다.

Operations는 매우 재사용성이 높으며 입출력과 도움을 주는 메서드들을 특정할 수 있습니다. Operation을 취소할 수 있으며 다른 operation들에 대한 의존성도 정의할 수 있습니다. 대부분 Operation들은 기본적으로 global queue에서 작동하는 operation queue에 추가할겁니다. 복잡하지 않은 경우 GCD가 사용하기 편리하며, 그렇지 않을 경우 operations를 사용하여 복잡한 작업을 해결할 수 있습니다. 복잡도는 작업 간의 소통량이나 작업의 수행에 대해 얼마나 가까이서 모니터링하기를 원하는지에 따라 대략적으로 파악할 수 있습니다.

profile
합리적인 해법 찾기를 좋아합니다.

0개의 댓글