iOS/Swift

Swift ;; GCD #4 Serial과 Concurrent

may_wonhui 2023. 3. 16. 15:10

앞선 포스팅에서

sync와 async에 대해서 공부해봤다.

 

serial과 concurrent, sync와 async를 공부하기 전에

async와 concurrent가 엄청나게! 헷갈렸다.

 

지금은 전혀 다른 개념이라는 것을 알고 있다.

 

Serial과 Concurrent는 뭘까?

DispatchQueue가 가진 특성이다.

 

먼저 요약하자면,

SerialQueue는 작업을 하나의 스레드에서 처리하고,

ConcurrentQueue는 작업을 여러 스레드를 사용하여 처리한다.

 

사용자는 작업의 특성에 맞게 

SerialQueue로 보낼 작업은 SerialQueue로,

ConcurrentQueue로 보낼 작업은 ConcurrentQueue로 보내면 되는 것이다.

스레드로의 분배는 큐가 알아서 해준다.

 


Serial (직렬)

큐의 특성 중 하나.

serial은 직렬이라는 의미이다.

 

큐가 하나의 스레드에서 모든 작업을 처리한다는 의미!

 

만일 내가 serial dispatch queue로 보냈다면 어떤 일이 일어날까?

 

 

1. 메인 스레드에서 serial queue로 task를 보낸다.

 

2. 큐는 계속 공부했듯이 대기열의 task를 여러 스레드로 분산처리 한다고 했다.

이 때! 만일 큐가 하나의 스레드에서 모든 작업을 처리한다면 serial queue이다.

 

serial(직렬)이라는 말 그대로 작업을 일렬로 처리하는 것!


Concurrent (병렬)

 

concurrent는 serial과 반대로 

큐가 여러 스레드로 작업을 할당해서 처리한다는 의미!

 

 

 

1. 메인 스레드에서 concurrent queue로 task를 보낸다.

 

2. 큐가 여러 스레드에서 작업을 처리한다면 concurrent queue이다.

 

concurrent(병렬)이라는 말 그대로 작업을 여러 스레드에서 나란히 처리하는 것!

 


앞에서 이렇게 작성했다.

사용자는 작업의 특성에 맞게
SerialQueue로 보낼 작업은 SerialQueue로,
ConcurrentQueue로 보낼 작업은 ConcurrentQueue로 보내면 되는 것이다.

 

작업의 특성에 맞게?

SerialQueue로는 순서가 중요한 작업을 보낸다.

ConcurrentQueue로는 유사한 작업이지만, 독립적인 작업을 보낸다.

 

예를 들어 인스타그램 피드처럼 여러 사진을 서버로부터 불러올 때, 불러오는 방법은 동일하지만 각각의 사진은 연관이 없다.

이럴 경우 ConcurrentQueue로 보낸다면, 큐는 여러 스레드를 통해 각 사진을 불러오는 작업을 진행한다.


정리

sync, async는 Task를 보낼 때 해당 작업의 특성(보내는 스레드가 해당 작업 완료를 기다릴지, 안 기다릴지)을 의미하는 것이고,

serial, concurrent는 Task를 보내는 목적지인 큐의 특성(하나의 스레드에서 처리할 것인지, 여러 스레드에서 처리할 것인지)을 의미하는 것이다.

 


참고

https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard

 

iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션

동시성(Concurrency)프로그래밍 - iOS프로그래밍에서 필요한 동기, 비동기의 개념 및 그를 확장한 GCD 및 Operation에 관한 모든 내용을 다룹니다., - 강의 소개 | 인프런

www.inflearn.com