Swift Concurrency. Behind the Scenes - WWDC21
Threading model 뉴스 피드 리더 앱을 예로 들어보자. 앱의 상위 컴포넌트는 다음과 같이 나눌 수 있다. 사용자 인터페이스를 담당하는 메인 스레드 사용자가 구독한 뉴스 피드를 추적하는 데이터베이스 최신 콘텐츠를 가져오는 네트워킹 서브시스템 사용자가 최신 뉴스를 요청하면 다음과 같은 흐름으로 처리할 수 있다. 메인 스레드에서 이벤트 제스처 처리 데이터베이스 작업을 처리하는 직렬 큐로 요청을 비동기적으로 디스패치 작업을 다른 큐로 보내면 메인 스레드는 데이터베이스 작업을 기다리지 않고 사용자 입력에 계속 반응할 수 있다. 직렬 큐가 상호 배제를 보장하므로 데이터베이스 접근을 순서대로 처리할 수 있다. 데이터베이스 큐에선 사용자가 구독한 피드에 URLSession을 통해 콘텐츠를 다운로드하는 네트워크 요청을 스케줄링 결과가 도착하면 URLSession의 콜백이 Delegate Queue 위에서 호출되어서 각 결과의 Completion Handler가 동기적으로 데이터베이스를 업데이트한다. MainThread를 깨워서 UI를 리프레시한다. 보기에는 합리적인 방법이다. 메인 스레드를 블록하지 않으면서 네트워크 요청을 동시에 처리할 수 있기 때문이다. ...