적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/iOS

[iOS GCD] Concurrency 동시성 프로그래밍이란? + 왜 필요할까

hongssup_ 2023. 2. 10. 01:52
반응형

작업(task) 분산시키고 여러 스레드에서 동시에 일을 있도록 처리하기 위해서

 

Sync & Async 

: 단일 작업. 작업 하나를 수행하는 특성?

synchronous

: 동기. 큐에 추가된 작업이 종료될때까지 기다리는 것. 한번에 하나의 작업만 실행되도록. 

장점 : 설계가 매우 간단하고 직관적

단점 : 응답이 주어질 때까지 대기해야함

asynchronous

: 비동기. 큐에 작업을 추가하지만 완료 응답을 기다리지 않고 동시에 실행될 수 있어, 여러 작업을 동시에 처리할 수 있도록 해주는 특성. 

장점 : 응답을 기다리지 않고 다른 작업을 하므로 자원을 효율적으로 사용할 수 있다

단점 : 동기보다 설계가 복잡하다. 

Serial & Concurrent

- Serial Queue : 작업들을 한번에 하나씩 순차적으로 처리하는 직렬 Queue

주로 작업을 동기화할 때 사용. 항상 순서가 보장됨

- Concurrent Queue : 대기열에 들어온 작업들을, 동시에 여러개를 실행시킬 수 있는 병렬 Queue

주로 작업을 수행?할 때 사용. 순서 보장은 되지 않음. 

처음 등록된 작업이 끝나지 않아도 다음 작업을 다음 thread 에 할당해서 동시에 처리되도록. 

 

** sync랑 serial이랑 차이가 무엇인가 헷갈렸는데

sync / async 는 작업 하나를 수행 할 때 각 작업 단위의 특성을 의미하고

serial / concurrent 는 여러개의 작업들을 처리할 때 어떻게 처리할 지 작업들의 처리 방식을 뜻한다.

따라서 serial 혹은 concurrent queue에 들어가는 각 작업들은 sync 일수도 있고, async 일수도 있으며 serial 은 큐에 들어온 작업들을 하나씩 순차적으로 실행하고 concurrent 방식은 동시에 실행 가능하다는 것. 

 

 

*** 비동기와 동시성은 같은 말은 아니다!

비동기 프로그래밍 Async 

: 프로그램의 흐름 및 이벤트의 발생, 처리를 독립적으로 수행하는 방법

동시성 프로그래밍 Concurrency

: 여러 작업이 논리적인 관점에서 동시에 수행되는 것처럼 보이도록 하는 것. 

싱글코어 / 멀티코어에서 멀티 스레딩을 하기 위해 적용

병렬성 프로그래밍 Parallel

: 여러 작업이 물리적인 관점에서 실제로 동시에 수행되는 것. ex) 멀티코어

 

 


참고 : 

Documentation Archive - Concurrency Programming Guide

https://developer.apple.com/library/archive/documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html

Documentation - The Swift Programming Language - Concurrency

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

 

728x90
반응형