홍로그

Concurrency Programming 본문

iOS

Concurrency Programming

성홍민 2023. 6. 22. 16:50

📖Concurrency Programming이란?

Concurrency Programming은 여러 개의 작업을 동시에 실행하거나 처리하는 방법을 말합니다. iOS에서는 이를 효과적으로 관리하기 위해 다양한 concurrency models, tools, 그리고 기술이 제공되고 있습니다. Concurrency Programming은 앱의 성능을 향상시키고 사용자 경험을 개선하는 데 도움을 줍니다.

 

GCD(Grand Central Dispatch)

GCD는 앱 내에서 작업을 큐에 추가하고, 시스템이 이를 관리하여 필요한 스레드에서 실행하도록 합니다. GCD는 다양한 큐(메인 큐, 백그라운드 큐 등)와 디스패치 그룹을 제공하여 작업을 관리하고 우선순위를 설정할 수 있습니다. 비동기적인 작업을 처리하거나 동시에 실행해야 하는 작업을 단순화하는 데 사용됩니다.

Operation Queue

Operation Queue는 GCD와 유사한 작업 큐를 제공하지만, 보다 고수준의 추상화 계층을 제공하여 작업 간의 종속성, 우선순위, 취소 등을 쉽게 관리할 수 있습니다. Operation 객체를 생성하여 작업을 정의하고 큐에 추가하면 시스템이 자동으로 작업을 관리하고 실행합니다.

Swift Concurrency

Swift Concurrency는 비동기 작업을 보다 쉽게 작성하고 관리할 수 있는 구조적인 접근 방식을 제공합니다. Swift Concurrency는 async/await 패턴을 사용하여 비동기 작업을 처리하고, 앱의 동시성 작업을 단순화하고 가독성을 향상시킵니다.

Concurrency Programming 이점

  • 성능 개선: 여러 작업을 병렬로 실행하여 시간을 단축시킬 수 있으며, 멀티코어 프로세서를 효과적으로 활용할 수 있습니다.
  • 사용자 경험 개선: 비동기적인 작업을 통해 UI를 블로킹하지 않고 앱의 응답성을 향상시킬 수 있습니다.
  • 모듈화 및 유지 보수 용이성: 작업을 작은 단위로 분리하여 모듈화 할 수 있으며, 코드의 가독성과 재사용성을 높일 수 있습니다.

Concurrency Programming 문제점

  • 동기화 문제(Synchronization Problem): 동기화 문제는 여러 스레드나 프로세스가 공유된 자원(예: 변수, 파일, 데이터 구조 등)에 동시에 접근할 때 발생할 수 있는 문제입니다. 이러한 상황에서 각 스레드가 자원에 대한 접근을 제대로 조절하지 않으면 예상치 못한 결과가 발생할 수 있습니다.
  • 데드락(Deadlock): 데드락은 서로 다른 스레드나 프로세스가 서로가 가진 자원을 기다리며 무한히 블로킹되는 상황을 말합니다. 각 스레드 또는 프로세스는 다른 스레드가 보유한 자원을 기다리는 동시에 스스로 보유한 자원을 유지하고 있기 때문에 상태를 변화시킬 수 없습니다. 따라서 프로그램은 멈추게 되고, 더 이상 진행할 수 없게 됩니다.

 

참고

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/

 

Documentation

 

docs.swift.org

https://developer.apple.com/documentation/dispatch

 

Dispatch | Apple Developer Documentation

Execute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.

developer.apple.com

https://developer.apple.com/documentation/foundation/operationqueue

 

OperationQueue | Apple Developer Documentation

A queue that regulates the execution of operations.

developer.apple.com

반응형

'iOS' 카테고리의 다른 글

fileprivate과 private의 차이  (0) 2023.08.10
TCA  (0) 2023.08.03
DeepLink  (0) 2023.06.20
Combine AnyCancellable  (0) 2023.06.19
WWDC23 SwiftData  (0) 2023.06.14