티스토리 뷰

안녕하세요 :)

오늘은 직렬(Serial)큐, 동시(Concurrent)큐, 동기(Sync), 비동기(Async)에 대해서

정리를 해보려고 합니다!

 

왜냐하면

비동기라고 듣고 그냥 쓰고 있는 것들이 많은데

내가 잘 알고 쓰고 있는 게 맞는지 의문이 들어서요..ㅠㅠ

 

지금부터 내용은

아래의 인프런 동영상 강의를 기반으로

정리해 보도록 할게요!

 

제 기준에서는

알아듣기 쉽게 설명해 주셔서 좋더라고요 :)

 

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

 

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

동시성(Concurrency)프로그래밍 - iOS프로그래밍에서 필요한 동기, 비동기의 개념 및 그를 확장한 GCD 및 Operation에 관한 모든 내용을 다룹니다. 초급 IT 프로그래밍 모바일 앱 iOS Swift 모바일 앱 온라인 강의 ios에서 동기와 비동기 처리의 기본 개념을 배우고 디스패치큐GCD와 오퍼레이션큐OperationQueue에 대해 배워보자

www.inflearn.com

 

1. GCD

 

GCD (Grand Central Dispatch)는

"멀티코어 프로세서와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술"

이라고 wikipedia에 나와있네요

https://en.wikipedia.org/wiki/Grand_Central_Dispatch

 

Grand Central Dispatch - Wikipedia

Grand Central Dispatch (GCD or libdispatch), is a technology developed by Apple Inc. to optimize application support for systems with multi-core processors and other symmetric multiprocessing systems.[2] It is an implementation of task parallelism based on

en.wikipedia.org

 

GCD를 우리는 통상적으로

Dispatch Queue(디스패치 큐) 라고 부릅니다.

 

Dispatch Queue를 정리하기에 앞서

직렬(Serial)큐, 동시(Concurrent)큐, 동기(Sync), 비동기(Async)

4가지에 대해서 먼저 정리할 건데요.

 

이 글에서는

직렬(Serial)큐와 동시(Concurrent)큐에 대해서 알아보겠습니다.

 

2. 직렬(Serial)큐, 동시(Concurrent)큐

 

직렬(Serial)큐, 동시(Concurrent)큐에 들어가기 앞서

큐의 특징은 알고 계신가요??

 

큐는 FIFO(First In First Out) 형태로

먼저 들어간 것이 먼저 나오는 특징을 가지고 있습니다.

 

자, 그럼 먼저,

직렬(Serial)큐에 대해서 알아보도록 하겠습니다.

 

직렬(Serial)큐란?

"분산처리시킨 작업을 다른 한 개의 쓰레드에서 처리하는 큐"라고 이야기하겠습니다.

(강의에서 위와 같이 정의하고 있습니다)

 

메인 쓰레드에서 하나의 직렬큐에 작업들을 할당합니다.

그러면 아래와 같은 상태가 되겠지요??

 

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

 

그리고 직렬큐 대기열에 들어있던 작업들은

Thread2에 순차적으로 할당되게 됩니다. (큐의 특징)

(무조건 Thread2가 아닙니다. 할당되는 쓰레드는 알 수 없습니다)

 

그러므로 Thread2에서 순차적으로 처리가 되겠지요!?

 

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

 

단!

여러 개의 직렬(Serial)큐를 만들어 처리한다면

각각의 직렬(Serial)큐 별로 하나의 쓰레드에 작업을 할당하지만

각각의 큐는 Concurrent 하게 동작합니다.

 

Concurrent하게 동작한다??

 

자, 그러면

동시(Concurrent)큐에 대해서 알아봐야겠죠??

 

동시(Concurrent)큐란?

"분산처리시킨 작업을 다른 여러 개의 쓰레드에서 처리하는 큐"라고 이야기하겠습니다.

 

마찬가지로

메인 쓰레드에서 하나의 동시큐에 작업들을 할당합니다.

그러면 아래와 같은 상태가 되겠지요??

 

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

 

직렬큐와 다르게

여러 개의 쓰레드로 분산하여 처리하고 있습니다.

몇 개의 쓰레드로 분산할지는 시스템이 알아서 결정하는 부분이라고 하네요!

 

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

 

자, 정리하자면!!!

직렬(Serial)큐와 동시(Concurrent)큐가 있는데

 

직렬(Serial)큐는

"분산처리시킨 작업을 다른 한 개의 쓰레드에서 처리하는 큐"

 

동시(Concurrent)큐는

"분산처리시킨 작업을 다른 여러 개의 쓰레드에서 처리하는 큐"

 

하지만!

여러 개의 직렬(Serial)큐를 만들어 처리한다면

각각의 직렬(Serial)큐 별로 하나의 쓰레드에 작업을 할당하지만

각각의 큐는 Concurrent 하게 동작합니다.

 

저 나름대로 이해하기 위해서

동영상 강의를 참고하여 정리했는데요.

 

혹시, 제가 잘못 이해하고 적은 부분이 있다면

언제든지 알려주시기 바랍니다!

 

끝!

댓글