작업(task)을 분산시키고 여러 스레드에서 동시에 일을 할 수 있도록 처리하기 위해서
Sync & Async
: 단일 작업. 작업 하나를 수행하는 특성?
synchronous
: 동기. 큐에 추가된 작업이 종료될때까지 기다리는 것. 한번에 하나의 작업만 실행되도록.
장점 : 설계가 매우 간단하고 직관적
단점 : 응답이 주어질 때까지 대기해야함
asynchronous
: 비동기. 큐에 작업을 추가하지만 완료 응답을 기다리지 않고 동시에 실행될 수 있어, 여러 작업을 동시에 처리할 수 있도록 해주는 특성.
장점 : 응답을 기다리지 않고 다른 작업을 하므로 자원을 효율적으로 사용할 수 있다
단점 : 동기보다 설계가 복잡하다.
Serial & Concurrent
- Serial Queue : 작업들을 한번에 하나씩 순차적으로 처리하는 직렬 Queue
주로 작업을 동기화할 때 사용. 항상 순서가 보장됨
- Concurrent Queue : 대기열에 들어온 작업들을, 동시에 여러개를 실행시킬 수 있는 병렬 Queue
주로 작업을 수행?할 때 사용. 순서 보장은 되지 않음.
처음 등록된 작업이 끝나지 않아도 다음 작업을 다음 thread 에 할당해서 동시에 처리되도록.
** sync랑 serial이랑 차이가 무엇인가 헷갈렸는데
sync / async 는 작업 하나를 수행 할 때 각 작업 단위의 특성을 의미하고
serial / concurrent 는 여러개의 작업들을 처리할 때 어떻게 처리할 지 작업들의 처리 방식을 뜻한다.
따라서 serial 혹은 concurrent queue에 들어가는 각 작업들은 sync 일수도 있고, async 일수도 있으며 serial 은 큐에 들어온 작업들을 하나씩 순차적으로 실행하고 concurrent 방식은 동시에 실행 가능하다는 것.
*** 비동기와 동시성은 같은 말은 아니다!
비동기 프로그래밍 Async
: 프로그램의 흐름 및 이벤트의 발생, 처리를 독립적으로 수행하는 방법
동시성 프로그래밍 Concurrency
: 여러 작업이 논리적인 관점에서 동시에 수행되는 것처럼 보이도록 하는 것.
싱글코어 / 멀티코어에서 멀티 스레딩을 하기 위해 적용
병렬성 프로그래밍 Parallel
: 여러 작업이 물리적인 관점에서 실제로 동시에 수행되는 것. ex) 멀티코어
참고 :
Documentation Archive - Concurrency Programming Guide
Documentation - The Swift Programming Language - Concurrency
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/
'Swift iOS 앱 개발 > iOS' 카테고리의 다른 글
[iOS GCD] Concurrency Problems 동시성과 관련된 문제 + 해결방법 (2) | 2023.02.11 |
---|---|
[iOS GCD] DispatchGroup 디스패치 그룹 (0) | 2023.02.11 |
[Swift GCD] GCD(Grand Central Dispatch) (0) | 2023.02.09 |
[iOS] Bounds와 Frame의 차이점 (0) | 2022.12.15 |
SceneDelegate에서 code base로 화면 진입점 설정하는 법 (0) | 2022.11.22 |