iOS/Concurrency (6) 썸네일형 리스트형 [Swift Concurrency] Actor / MainActor Main ActorActor는 가변 상테에 대한 접근을 순차화하여 안전하게 공유하도록 한다. UI 관련 데이터는 MainActor가 보호하며, UI 랜더링, 이벤트 처리, UI 업데이트 코드는 MainActor 위에서 실행된다. @MainActor 속성(attribute)을 사용하여 함수, 메서드, 클로저, 타입을 MainActor에서 격리할 수 있다. @MainActorfunc show(_: Data) { // ... UI 코드 ...}func downloadAndShowPhoto(named name: String) async { let photo = await downloadPhoto(named: name) await show(photo)}MainActor에서 벗어난 코드가 MainA.. [Swift Concurrency] Task Task와 Task Group Task는 비동기 작업 단위이며, 모든 비동기(async) 코드는 Task의 일부로 실행된다. 여러 Task를 생성하면 Swift가 동시에 실행할 수 있도록 스케줄링한다. async let은 암묵적 child Ttask를 만들지만, 명시적 Task 그룹(TaskGroup)을 사용하면 우선순위, 취소(cancellation), 동적 Task 생성 등을 더 세밀히 제어할 수 있다. 구조화된 동시성(structured concurrency)을 통해 Task 간 부모-자식 관계를 관리하며 다음과 같은 장점이 있다.부모 Task는 자식 Task가 완료될 때까지 기다린다.자식 Task의 우선순위가 높아지면 부모 Task 우선순위도 자동으로 조정된다.부모 Task가 취소되면 모든 자식.. [Swift Concurrency] Async Concurrency(동시성)비동기 작업을 수행한다. Swift는 구조화된 방식으로 비동기(async)및 병렬 기능을 제공한다. 비동기 코드는 일시 중단했다가 나중에 재개할 수 있지만, 한 번에 프로그램 한 부분만 실행된다. 코드의 일시 중단 및 재개를 통해 네트워크 통신에서 데이터를 가져오거나 파일을 파싱하는 장기적인 작업을 수행하는 동안 UI 업데이트 같은 단기 작업을 계속 진행할 수 있다. 병렬 및 비동기 코드를 함께 사용하는 프로그램은 여러 작업을 동시에 수행하며, 외부 시스템을 기다리는 작업은 일시 중단한다. 비동기와 병렬 코드의 일반적인 결합을 통틀어 “동시성(concurrency)”이라 한다. 기존 Concurrency를 사용하지 않고 직접 구현할 수 있지만 그 코드는 가독성이 낮아진다. 아.. [Swift] DispatchQueue (3) - DispatchGroup DispatchGroup : 하나의 단위로 모니터링할 수 있는 작업들의 그룹- 여러 작업을 그룹에 추가하고 동일한 Queue 또는 다른 Queue에서 실행되도록 예약할 수 있음- 그룹 내의 모든 작업이 실행 완료 후 completionHandler를 실행- 그룹의 모든 작업이 실행 완료할 때까지 동기적(sync)으로 기다릴 수 있음 // 그룹 생성let group = DispatchGroup()// main Queue를 group에 추가DispatchQueue.main.async(group: group){}// group의 작업이 완료되었을 때 main Queue에 알림group.notify(queue: DispatchQueue.main){} 참고 iOS Concurrency(동시성) 프로그래밍, 동기 .. [Swift] Dispatch (2) - DispatchQueue / QoS 이전 포스팅 [Swift] Dispatch (1)Dispatch (Framework) 시스템에서 관리하는 Dispatch 대기열에 작업을 제출하여 Multi Core 하드웨어에서 코드를 동시에 실행 GCD(Grand Central Dispatch)라고 알려진 Dispatch에서는 macOS, iOS, watchOS 및 tvOS의 멀티코kimkhuna99.tistory.com sync(동기) vs async(비동기) → 작업을 보내는 시점에서 기다릴지 말지 serial(직렬) vs concurrent(동시) → Queue로 보내진 작업들을 여러 개의 Thread로 보낼지, 한 개의 Thread로 보낼 것 인지 DispatchQueuemain queue - 오직 한개만 존재- Serial 특성을 가진 Que.. [Swift] Dispatch (1) - GCD Dispatch (Framework)시스템에서 관리하는 Dispatch 대기열에 작업을 제출하여 Multi Core 하드웨어에서 코드를 동시에 실행GCD(Grand Central Dispatch)라고 알려진 Dispatch에서는 macOS, iOS, watchOS 및 tvOS의 멀티코어 하드웨어에서 동시 코드 실행 지원에 대한 체계적이고 포괄적인 개선사항을 제공하는 언어 기능Runtime 라이브러리 및 시스템 개선사항이 포함되어 있음 Dispatch | Apple Developer DocumentationExecute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.devel.. 이전 1 다음