iOS/동시성 프로그래밍

직렬(Serial) vs 동시(Concurrent)

소재훈 2022. 3. 30. 22:11

이 포스트는 인프런 Allen님의

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

강의를 정리한 것입니다.

 

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

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

 

직렬(Serial)과 동시(Concurrent)는 큐의 특성에 관한 이야기이다.

아래와 같은 그림처럼 작업이 큐에 담겨져 있다고 할때

 

Serail이란 단 하나의 다른 스레드로만 보내는 특성을 가지는 대기열이다.

큐에서 작업을 오로지 하나의 스레드로만 보내주는 것을 볼 수 있다.

 

Concurrent 큐는 여러개의 쓰레드로 분산처리하는 특성이다.

몇개의 쓰레드로 분산할지는 시스템이 알아서 결정한다.

정리하면 다음과 같다.

직렬(Serial)큐: 분산처리 시킨 작업을 다른 하나의 쓰레드에서 처리하는 큐

동시(Concurrent)큐: 분산처리 시킨 작업을 다른 여러개의 쓰레드에서 처리하는 큐

 

직렬큐는 순서가 중요한 작업을 처리할 때 사용하며,

동시 큐는 각자 독립적이지만 유사한 여러개의 작업을 처리할 때 사용한다.

 

그렇다면 이전에 공부한 비동기(Async)와 동시(Concurrent)가 같은 말일까?

작업을 보내는 시작점에서 기다릴지 말지를 다루는 것이 비동기(Async)의 개념이고,

동시/직렬의 개념은 대기열(Queue)로 보내진 작업이 여러개의 스레드로 갈 것인지

하나의 스레드로 갈것인지를 다루는 것이다.

 

즉 두개는 다른 개념이다.