Swift는 구조화된 방식으로 비동기와 병렬 코드 작성을 지원한다.구조화된 동시성 (structured concurrency Vs unstructured concurrency)비동기 코드일시적으로 중단되었다가 다시 실행할 수 있지만 한번에 프로그램의 한 부분만 실행된다.프로그램에서 코드를 일시 중단하고 다시 실행하면 UI 업데이트와 같은 짧은 작업을 계속 진행하면서 네트워크를 통해 데이터를 가져오거나 파일을 분석하는 것과 같은 긴 실행 작업을 계속할 수 있다.병렬 코드동시에 코드의 여러부분이 실행됨을 의미한다.예를 들어 4코어 프로세서의 컴퓨터는 각 코어가 하나의 작업을 수행하므로 코드의 4부분을 동시에 실행할 수 있다.Swift 에서 동시성 모델은 쓰레드의 최상단에 구축되지만 직접적으로 상호작용하지 않..
Swift Concurrency를 사용한 Task 및 Continuation 동작 원리 분석공통 코드는 버튼을 클릭했을 때, 0~100,000까지 계산해서 UILabel에 업데이트한다.Continuation의 생성과 어떤 코드에서 어떤 동작을 할 지, 예측 및 분석한다.Concurrency 동작에 따라 Context Switching 비용 분석과 어느 Thread에서 동작하는지 살펴본다.1. Continuation 코드@objc private func task1ButtonTapped() { // 1. Creating -> Running Task { // 2. Running -> Suspended (await로 인해) let result = await basicAsync..
GCD -> Continuation, async await에서 차이점이 뭘까? - GCD는 작업을 큐에 넣고 나면 자동으로 스케줄링하여 처리하고, 실행 중인 특정 작업을 일시 중지하거나 다시 이어서 실행하는 기능은 없다. - DispatchQueue.async는 태스크 실행을 위해 큐에 맡기지만, 작업이 실행되는 도중 중지되었다가 다시 이어지도록 상태를 저장하지 않는다. - Continuation이 작업의 상태를 유지하고, 조건이 충족되면 다시 이어질 수 있다. - 즉, Continuation은 비동기 함수의 실행을 일시 중지하고, 특정 조건이 충족되면 다시 실행을 이어갈 수 있는 기능이다. - Concurrency에서는 async로 메서드를 호출하면 thread의 제어권을 포기하는 suspende..

let taskA = Task { print("Task A 시작") try await Task.sleep(nanoseconds: 1_000_000_000) print("Task A 완료") return "결과 값" } let taskB = taskA print("taskA 상태: \(taskA.isCancelled ? "취소됨" : "실행 중")") taskA.cancel() print("taskB 상태: \(taskB.isCancelled ? "취소됨" : "실행 중")") Task { do { let result = try await taskB.val..