본문 바로가기

iOS/Concurrency

(11)
Concurrency (10) Actors in a Distributed System 이전글 - Concurrency(9)  Global Actors Modern Concurrency in Swift를 읽고 간단 정리 이전 장들에서, 다중 CPU 코어에서 동시성 작업을 병렬로 실행하는 방법들을 배웠다.또한 액터 타입을 사용하여 동시성을 안전하게 관리하는 방법도 익혔다. 이번 마지막 장에서는 Distributed Actor를 다룬다.Distributed Actor는 로컬에서만 실행되는 것이 아니라, 다른 프로세스나 다른 기기에서 실행될 수 있다.  Distributed Actor는 다음 상황에서 사용될 수 있다. 같은 기기의 자식 프로세스에서 코드 실행동일한 기기에서 메인 프로세스와 독릭접인 자식 프로세스에서 코드를 실행하여 안전성을 높인다.자식 프로세스에 치명적 오류가 발생하더라도, 메인..
Concurrency (9) Global Actors 이전글 - Concurrency(8) Getting Started With Actors Modern Concurrency in Swift를 읽고 간단 정리 이전 장에서는 Swift의 액터(actor) 타입을 공부했다. 이는 코드가 내부 상태에 안전하고 동시성 접근을 할 수 있도록 해준다.동시성 작업(Concurrent computation)들을 신뢰할 수 있게 해주며, data race를 방지한다. 이번 장에서는 Global Actor에 대해 다룰 것인데, MainActor는 대표적인 Global Actor 중 하나이다.Swift의 MainActor는 UI 작업을 메인 스레드에서 안전하게 실행시켜 주는 역할을 한다.  앱은 항상 하나의 메인 스레드에서 실행되기 때문에 다수의 MainActor를 생성할 수..
Concurrency (8) Getting Started With Actors 이전글 - Concurrency(7) Concurrent Code With Task Group  Modern Concurrency in Swift를 읽고 간단 정리  이전 챕터에서 TaskGroup, ThrowingTaskGroup API를 사용해 작업을 병렬로 실행하여, 여러 스레드와 CPU 코어를 사용할 수 있도록 했다. TaskGroup의 설계는 작업을 병렬로 실행하면서도, 그룹을 비동기 시퀀스로 순회함으로써 안전하고 직렬적인 방식으로 실행 결과를 수집할 수 있도록 해준다.  이전 장에서 공유 상태 변경 시에 유의점에 대해 언급했는데, 이는 동시성 프로그래밍의 어려운 측면 중 하나이다.스레드가 동시에 동일한 메모리 영역에 접근할 때 신중한 제어가 필요하다. 이번 챕터에서는 이를 다룰 수 있는 act..
Concurrency (7) Concurrent Code With TaskGroup 이전글 - Concurrency(6) Testing Asynchronous Code Modern Concurrency in Swift를 읽고 간단 정리 현재 챕터까지 진행하면서 아래 내용을 학습하였다.async/await를 사용한 코드 설계Asynchronous Sequence 생성async let 바인딩을 통한 Task 병렬 실행 특히 asnyc let 바인딩은 일부 태스크를 병렬로 실행하면서 (Task3, Task4) 다른 태스크는 서로 의존하며 순차적으로 실행해야 할 때(Task1, Task2, Task5) 비동기 흐름을 설계하는 강력한 메커니즘을 지원한다.   async let 구문은 여러 비동기 태스크를 병렬로 실행하는데 유용하지만, 이는 고정된 개수의 태스크를 다룰 때 적합하다.병렬로 실행해야..
Concurrency (6) Testing Asynchronous Code 이전글 - Concurrency(5) Intermediate async/await & Checked Continuation Modern Concurrency in Swift 를 읽고 간단 정리  Apple에서 XCTest로 비동기 코드를 테스트하는 것은 역사적으로 복잡했었다.XCTWaiter, expectations 같은 방법을 사용해야 했고, 코드가 완료될 때 까지 기다렸다가 그 출력 값을 검증해야 한다.    Swift의 동시성 모델에서는 더 간단하다.비동기 테스트를 위한 메서드에 async를 선언await 키워드를 만나면 실행을 중단하고, 완료된 후 재개비동기 코드를 동기 코드처럼 자연스럽게 작성할 수 있음보다 복잡한 비동기 동작, 시퀀스 및 스트림과 관련된 경우에는 직접 테스트 인프라를 구축 필요..
Concurrency (5) Intermediate async/await & Checked Continuation 이전글 - Concurrency(4) Custom Asynchronous Sequences With AsyncStream Modern Concurrency in Swift 를 읽고 간단 정리 이전 글에서 NotificationCenter 처럼 기존 API에 async/await을 적용하는 것을 살펴보았다.이번 글에서도 이어서 기존 코드들에 Swift Concurrency를 활용하는 방안에 대해 소개 ! Introducing Continuations이전 애플의 주요한 비동기 방식completion callbacksdelegate --> continuation을 활용하여 Swift 동시성 모델로 전환할 수 있다 !  Continuation특정 시점에  프로그램의 상태를 추적하는 객체Swift 동시성 모델은 ..
Concurrency (4) Custom Asynchronous Sequences With AsyncStream 이전글 - Concurrency(3) AsnycSequence & Intermediate Task Modern Concurrency in Swift 를 읽고 간단 정리 Digging into AsyncSequence, AsyncInteratorProtocol and AsyncStreamAsyncSequenceAsyncSeqeunce@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)@rethrows public protocol AsyncSequence {    /// The type of asynchronous iterator that produces elements of this    /// asynchronous sequence.    assoc..
Concurrency (3) AsyncSequence & Intermediate Task 이전글 - Concurrency(2) Getting started with async/await Modern Concurrency in Swift 를 읽고 간단 정리Getting to Know AsyncSequence AsyncSequence는 비동기적으로 Element를 생성할 수 있는 시퀀스를 나타내는 프로토콜- Swift Sequence와 동일- 일반적인 Sequence에서는 다음 Element를 즉시 사용 가능- AsyncSequence에서는 await 키워드를 사용하여 다음 요소가 준비될 때 까지 기다려야 한다. for문for try await item in asyncSequence { // Next item for asyncSequence} while문var iterator = async..