[Swift] 내가 두고두고 보려고 쓰는 GCD 관련 간단 개념 정리

호랭이·2022년 10월 14일
0

🍎 Swift

목록 보기
13/13

몇 개월 전에 GCD를 처음 접하게 되면서 어떻게 공부는 해두었는데, 그 뒤로 이론과 원리는 서서히 까먹어가면서 잘도 실컷 쓰고 있었다...

그러다 갑자기, 누군가 나에게 그래서 GCD가 뭔데!?!?하면 속시원히 설명하지 못할 것 같다는 생각이 들었다.

그래서 이 지식이 옅어지려고 할 때마다 두고두고 보려고 쓰는 간단 정리글이다.


GCD란?

Grand Central Dispatch
동시성 프로그래밍을 하기 위해 다수의 스레드를 활용해야 하는데, 이 스레드의 관리를 시스템이 알아서 해주도록 만들어진 기술
코드로 작업의 순서와 동기/비동기 처리만 해주면 시스템이 스레드를 관리해줌


동시성 프로그래밍

  • 여러가지 Task가 멀티 스레드 환경에서 동시에 처리되는 것
  • 처리 시간이 오래 걸리는 작업을 할 때 동시성 프로그래밍을 하지 않는다면 프로그램 실행의 지연이 생길 수 있음
  • Swift의 동시성 프로그래밍 구현 방법은 GCD, Operation, aync/await이 있음

동시성 프로그래밍과 병렬 프로그래밍

동시성! 원코어 매니테스크!!!! 슉 슈슈슉 나는 손이 보이지 않을 정도로 빠르지
병렬!!! 매니코어 원테스크!!!!! 일이다!! 나눠!!!

동시성 프로그래밍

하나의 CPU가 여러 Task를 Context Switching을 통해 빠르게 번갈아가면서 다수의 스레드에서 실행하는 것

병렬 프로그래밍

하나의 Task를 작은 작업 단위로 나누어 다수의 CPU가 동시에 처리하는 것


코어와 스레드

코어

CPU. 한번에 하나의 작업만 할 수 있다. 여러개의 작업을 동시성 프로그래밍을 통해 실행할 수 있지만 동시에 하는 것은 아님. 빠르게 조금씩 번갈아가면서...

스레드

작업 단위. 나는 작업대와 비슷한 개념으로 이해함


동기와 비동기

동기

작업이 끝날 때까지 기다렸다가 완료된 뒤에 다음 작업을 실행

비동기

작업이 끝나는 것을 기다리지 않고 다음 작업을 실행


DispatchQueue

GCD를 사용하기 위한 Queue.


Serial과 Concurrent

단일 스레드 작업 / 다중 스레드 작업
DispatchQueue에 별도의 설정을 하지 않으면 기본값은 Serial


main 스레드에서 sync를 사용하면 안되는 이유

sync를 사용하면 작업이 끝날 때까지 다음 코드로 넘어가지 않고 스레드가 멈춘 상태로 기다리게 되는데, 스레드가 멈춘다면 sync 블록의 코드도 실행되지 않고 결국 작업도 끝날 수가 없어지고 그래서 다음 코드로 넘어갈 수 없고... 하는 데드락 상태가 되기 때문

하지만 global 스레드에서 main.sync를 호출하는 것은 가능하다.
global 스레드가 main.sync를 호출하면 DispatchQueue는 main 스레드에서 sync 코드 블록을 실행하고, 그동안 global 스레드는 기다린다.
main에서 작업이 끝나면 다음 코드가 실행된다.

profile
삐약

0개의 댓글