GCD 에 대해서 제대로 공부해 보고자 한다. 말로만 GCD 많이 들어봤지 실제로는 음... 모른다고 하는 게 맞는 것 같다. 2024년을 맞이하여 (?) 제대로 공부해보려고 한다!
그전에 동기, 비동기 개념을 알아야 하므로 간단하게 동기, 비동기, 직렬, 동시, 병렬에 대해서 간단하게 작성해보려 한다. 간단하게 그림도 그려봤다. (혹시 틀린 부분 있으면 말씀해 주시면 바로 수정하겠습니다!)
동기 (Sync) / 비동기 (Async)
처음에는 동기는 순차적으로 처리하고 비동기는 여러 개 처리하는 거 아닌가? 정도로 알고 있었지만 비슷하지만 다르다. 동기와 비동기의 큰 차이는 작업의 완료와 관련이 있다.
동기 (Synchronous)
작업을 시키고 작업의 완료를 기다린다. 이 때 다른 작업을 실행하지 않는다.
비동기 (Asynchronous)
작업의 완료 여부를 기다리지 않고 다른 작업을 계속할 수 있다.
그렇다면 iOS 에서는 어떻게 작업을 분산시킬 수 있을까? 정말 간단하게 말해서 대기행렬인 Queue 로 보내면 된다!
직렬 (Serial) / 동시 (Concurrent) / 병렬 (Paralled)
얼핏 보면 동기가 직렬이고 비동기가 병렬 아닌가? 그리고 동시와 병렬의 차이는 뭐지? 우선 iOS 프로그래밍에서는 직렬과 동시로 구분하고 있다. 동시성은 한 번에 많은 일을 처리하는 것이고, 병렬성은 한 번에 많은 일을 하는 것이다. 동시성은 동시에 진행되는 것처럼 보이지만 실제로는 각 작업이 번갈아가면서 실행된다.
직렬 (Serial)
단일 스레드로만 작업을 보낸다. 순서가 중요할 때 사용된다. 스레드는 일하는 친구 (?) 정도로 볼 수 있다.
동시 (Concurrent)
여러 개의 다른 스레드로 작업을 보낸다. 한 번에 많은 일을 처리한다. 순서가 중요하지 않고 여러 개의 작업을 처리할 때 사용된다.
병렬 (Paralled)
여러 작업이 동시에 진행되고, 각 작업은 별도의 처리장치에서 독립적으로 실행된다.
iOS 개발에서 "동시" 용어를 사용하는 이유는 멀티스레딩과 비동기 작업을 중심으로 한 동시성 프로그래밍이 일반적이기 때문이라고 한다. iOS는 비동기 작업을 관리하기 위한 GCD(Grand Central Dispatch), Operation Queue와 같은 라이브러리를 제공하여 동시성 작업을 효과적으로 처리할 수 있도록 도와준다고 한다.
병렬 프로그래밍은 아예 다른 처리장치에서 처리를 하기 때문에 좀 더 복잡한 문제, 버그를 유발할 수 있기 때문에 안정성이 중요한 iOS 에서는 동시성 프로그래밍을 채택한다. 정도로 이해했다!
결론
동기, 비동기는 작업의 완료를 기다리느냐 안기다리느냐에 대한 것이고 직렬, 동기는 스레드 하나에 작업을 보내느냐 여러 개의 스레드에 작업을 보내느냐의 차이가 있구나! 정도로 이해하면 좋을 것 같다. 추후에 좀 더 깊이 공부해 보면 재밌을 것 같다.
참조
https://www.hackingwithswift.com/quick-start/concurrency/concurrency-vs-parallelism
'→ Swift Study' 카테고리의 다른 글
[Swift] 약한참조 (weak self) Swift 로 실습해보기 (0) | 2024.01.21 |
---|---|
[Swift] GCD 알아보기 4 - 동시성 관련 문제 (0) | 2024.01.11 |
[Swift] GCD 알아보기 3 - DispatchGroup (0) | 2024.01.11 |
[Swift] GCD 알아보기 2 - GCD 종류 (0) | 2024.01.09 |
[Swift] Swift의 convenience init 이해하기 (0) | 2023.10.25 |