JEP's Diary

Concurrency(1) 본문

Development/iOS

Concurrency(1)

지으니88 2023. 4. 18. 00:04

Concurrency는 구조화된 방식으로 비동기 및 병렬 코드 작성을 지원합니다. 때문에 async/await을 이용하여 가독성이 좋은 깔끔한 코드로 비동기 코드를 작성할 수 있다.

 

기존에는 GCD(Grand Central Dispatch)로 동시성 코드를 작성했다. GCD를 사용하면 async로 작업을 수행하고 나서 탈출클로저를 이용하여 해당 작업의 처리를 해주게 된다.

 

Task

비동기 작업의 단위(unit)입니다.

 

TaskGroup

동적으로 생성된 자식 작업들을 포함하는 그룹입니다.

 

AsyncSequence

elements에 대한 비동기적인, 순차적이고 반복적인 접근을 제공하는 타입입니다.

AsyncStream

새로운 elements를 생성하기 위해 지속적(continuation)으로 호출하는 클로저로부터 생성된 비동기 시퀀스입니다.

AsyncStream은 AsyncSequence를 준수하며, 비동기 이터레이터를 수동으로 구현하지 않고도 비동기 시퀀스를 편리하게 생성하는 방법을 제공합니다. 특히, 비동기 스트림은 콜백 또는 델리게이션 기반의 API를 async-await와 함께 사용하도록 적합합니다.

AsyncStream은 AsyncStream.Continuation을 받는 클로저로 초기화됩니다. 이 클로저에서 요소를 생성하고, continuation의 yield(_:) 메서드를 호출하여 스트림에 요소를 제공합니다. 더 이상 생성할 요소가 없을 때, continuation의 finish() 메서드를 호출합니다. 이로써 시퀀스 이터레이터가 nil을 생성하며 시퀀스를 종료합니다. continuation은 Sendable을 준수하므로, 비동기 스트림의 이터레이션 외부에서도 동시 컨텍스트에서 호출할 수 있습니다.

elements의 생산 속도가 호출자의 이터레이션 속도보다 빠른 경우가 있을 수 있습니다. 이에 따라 AsyncStream은 버퍼링 동작을 정의하고, 스트림이 최대 몇 개의 가장 오래된 또는 최신 요소를 버퍼링할 수 있도록 합니다. 기본적으로 버퍼 제한은 Int.max로 설정되어 있어 무제한으로 동작합니다.

 

Concurrency와 Combine

스위프트의 새로운 동시성 기능, 예를 들면 async/await, 액터, 그리고 async 시퀀스는 비동기 코드를 더 간결하고 효율적으로 처리할 수 있는 강력한 도구들을 제공합니다. 이러한 동시성 기능들은 Combine의 미래에 대한 영향을 가질 수 있습니다.

  • 개선된 비동기 처리: Combine은 Swift의 async/await를 활용하여 비동기 작업을 더 간결하고 오류 처리가 잘 되는 방식으로 처리할 수 있습니다. 이를 통해 Combine 기반 애플리케이션에서 더 가독성이 좋고 유지보수가 쉬운 비동기 코드를 구현할 수 있을 것입니다.
  • 향상된 성능: Swift의 동시성 기능인 액터와 같은 기능은 공유 리소스에 대한 동시 접근을 안전하고 효율적으로 관리하는 방법을 제공합니다. Combine은 이러한 기능을 활용하여 동시적인 작업, 예를 들면 여러 개의 publisher와 subscriber를 처리할 때 성능을 최적화하고 경합을 감소시킬 수 있을 것입니다.
  • 단순화된 코드베이스: Swift의 동시성 기능들이 도입되면 Combine의 코드베이스가 간소화될 수 있습니다. 예를 들면 기존의 completion handler 기반 비동기 코드를 async/await를 활용한 간결한 코드로 대체할 수 있습니다.
  • 더 높은 호환성: Swift의 동시성 기능들이 표준으로 채택되면, Combine과 다른 비동기 라이브러리들 간의 상호 운용성이 향상될 수 있습니다. 예를 들면 async/await를 사용하여 Combine과 다른 비동기 라이브러리 간의 상호 작용을 더 쉽게 구현할 수 있을 것입니다.

이러한 동시성 기능들은 Combine의 미래에 대한 잠재적인 영향을 가질 수 있으며, 더 효율적이고 유연한 비동기 코드를 구현하는데 도움을 줄 수 있을 것입니다.

 

참고.

https://wwdcbysundell.com/2021/the-future-of-combine/

 

What Swift’s new concurrency features might mean for the future of Combine | WWDC by Sundell & Friends

Looking at many of the new concurrency features that are being introduced in Swift 5.5, especially APIs like AsyncSequence and AsyncStream (which still hasn’t completely made it through the Swift Evolution process), many developers have noticed that ther

wwdcbysundell.com

https://docs.swift.org/swift-book/LanguageGuide/Concurrency.html

 

Concurrency — The Swift Programming Language (Swift 5.7)

Concurrency Swift has built-in support for writing asynchronous and parallel code in a structured way. Asynchronous code can be suspended and resumed later, although only one piece of the program executes at a time. Suspending and resuming code in your pro

docs.swift.org

https://developer.apple.com/news/?id=2o3euotz 

 

Meet Swift Concurrency - Discover - Apple Developer

Async awaits: Discover asynchronous and concurrent programming in Swift.

developer.apple.com

 

 

TODO

Concurrency와 Combine을 함께 사용하여 구현해보기

'Development > iOS' 카테고리의 다른 글

Xcode Device "000의 iPhone" isn't registered in your developer account.  (2) 2024.01.26
Cocoapods Private Pods  (0) 2023.07.27
WalletConnect (1)  (0) 2023.04.14
WalletConnect(2)  (0) 2023.04.14
Combine  (0) 2022.10.27