동시성 프로그래밍
코드를 작성할 때 별도의 처리를 하지 않았다면, Main Thread 에서 View 를 그리는 일부터 시작해서 다른 모든 Task 들을 처리하고 있었다. 단순 계산은 금방 처리하여도, 서버에서 데이터를 가져오는 등 무거운 Task 를 처리하면서 View 를 그리는 작업을 책임지는 Main Thread 는 해야할 많은 Task 에 부담을 느낀다.
그러므로 Main Thread 의 부담을 줄이기 위해 아래와 같이 다른 Thread 에서도 이러한 Task 를 동시에 작업하도록 하는 것이 바로 동시성 프로그래밍이다.
그렇다면 어떻게 다른 Thread 로 Task 를 전달할 수 있을까?
iOS 에서는 이러한 작업을 queue 라는 곳에 보내기만 하면 된다.
동시성 프로그래밍을 위해 지원하는 iOS 기술
Main Thread 가 맡은 Task 들을 queue 에 넣었다.
이제 iOS 에서는 다른 Thread 들을 생성하여 Task 를 분배한다. Task 를 분배하는 방식을 정리해보자.
1. GCD(Grand Central Dispatch)
Queue 에 Task 를 보내면 Thread 를 생성하여 Task 를 적절하게 분배하는 방법 중 하나가 바로 GCD 이다.
그리고 GCD 에서 사용하는 queue 이름이 바로 DispatchQueue 이다.
즉, DispatchQueue 로 Task 를 보내면 GCD 는 작업에 맞는 Thread 를 자동으로 생성한 후 실행하고, 작업이 종료되면 Thread 를 제거한다.
다음은 GCD 를 통해 Thread 를 생성하고, Task 를 분배하는 예시이다.
DispatchQueue.global().async {
// Task (작업의 한 단위)
}
클로저 내의 Task 는 하나의 작업 단위이기 때문에, 그 안의 동작들은 순차적으로 처리된다.
2. Operation
GCD 위에서 동작하지만, 더 기능이 추가된 형태이다.
추가 기능 ① : 동시에 실행할 수 있는 동작의 최대 수 지정
추가 기능 ② : 동작 일시 정시 및 취소
' iOS > 동시성 프로그래밍' 카테고리의 다른 글
동시성 프로그래밍 - Serial(직렬) 과 Concurrent(동시) (1) | 2022.10.01 |
---|---|
동시성 프로그래밍 - 동기 / 비동기 (2) | 2022.10.01 |