Programming/Swift

[Swift] Concurrency 동시성

guswlsdk 2025. 2. 8. 12:27
반응형

동시성 프로그래밍이 필요한 이유

iOS 앱 개발 시 비동기적인 작업을 제대로 처리 하지 않으면 버벅이는 상황을 경험한 적 있을 것이다. 동기적으로 작업이 이루어졌기 때문에 그러한 증상을 볼 수 있는데 메인 스레드가 아닌 다른 스레드로 작업을 분산 처리하여 비동기적인 코드를 작성하여 이러한 문제를 해결할 수 있을 것이다.

 

Swift에서는 직접적으로 스레드를 관리하지 않는다. 큐에 작업을 할당하면 Swift는 알아서 적절한 스레드에 작업을 할당한다.

 

위에서 말한 큐는 Swift에서 제공하는 GCD(DispatchQueue)와 Operation(OperationQueue) 등을 활용할 수 있다.

비동기(Async)의 개념

- 메인 스레드가 작업을 다른 스레드에 보내고 그 작업이 끝나길 기다리지 않고 메인 스레드는 다른 일을 한다.

 - task1이 다른 스레드에서 작업이 진행되는 동안 메인 스레드는 task2를 수행함

DispatchQueue.global().async{
	// 비동기 작업
}

 

 

 

동기(Sync)의 개념 

 

- 메인 스레드가 다른 스레드에 작업을 보내고 그 작업이 끝날 때까지 block 상태가 되어 기다린다.

- task1이 다른 스레드에서 작업이 끝날 때까지 기다렸다가 끝나면 메인스레드에서 task2를 진행할 수 있다.

- 하지만 Swift에서는 메인 스레드에서 다른 작업에 동기적인 작업을 하라고 해도 메인 스레드에서 실행된다고 한다.

 

DispatchQueue.global().sync{
	// 동기 작업
}

 

 

비동기의 개념이 일반적으로 필요한 이유는 대부분 네트워크 작업 때문이다. 네트워크와 관련된 작업들은 내부적으로 비동적으로 프로그래밍 되어 있다. URLSession...

 

직렬과 동시

Serial 큐

- 한 개의 스레드로만 작업을 보낸다.

- 보통 메인에서 분산처리 시킨 작업을 다른 한 개의 쓰레드에서 처리하는 큐

 

 

Concurrent 큐

- 다른 여러 개의 쓰레드에 작업을 보낸다

- 보통 메인에서 분산처리 시킨 작업을 다른 여러 개의 쓰레드에서 처리하는 큐

 

분산처리 시에 concurrent 큐가 무조건 좋아 보이는 데 왜 Serial 큐가 필요할까?

직렬 큐 - 순서가 중요한 작업을 처리할 때 사용한다.

동시 큐 - 각자 독립적이지만 유사한 여러 개의 작업을 처리할 때 사용한다. (CollectionView Cell에 image 다운로드 처리...)

 

 

정리

동기와 비동기는 메인 스레드가 다른 스레드에게 작업을 보낼 때 그 작업이 끝나길 기다리느냐 기다리지 않느냐에 대한 것

직렬과 동시는 메인 스레드에서 다른 스레드에게 작업을 보낼 때 한 개의 스레드에 보내는지 여러 개의 스레드에서 보내는지에 대한 것

 

 

 

 

 

 

https://www.inflearn.com/course/ios-concurrency-gcd-operation/dashboard

 

앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해 강의 | 앨런(Allen) - 인프런

앨런(Allen) | , 🙋🏻‍♂️ 자가 진단표   수업 후에는 아래의 개념들에 대해 명확히 알고, 이해하실 수 있습니다. 디스패치큐의 개념에 대해서 명확히 이해하고 있다. (Yes/No) 디스패치큐의 종류

www.inflearn.com

 

 

 

반응형