GGURUPiOS

동시성 프로그래밍 - 동시성 프로그래밍이란? 본문

Swift/동시성 프로그래밍

동시성 프로그래밍 - 동시성 프로그래밍이란?

꾸럽 2023. 4. 19. 16:27

동시성 프로그래밍 (Concurrency Programming)

동시성 프로그래밍이란 멀티 스레드 환경에서 여러 작업을 동시에 처리하는 기술임

스위프트에서는 GCD, Operation, async/await 등을 활용해서 동시성 프로그래밍을 작성할 수 있음

그 전에 용어 정리 먼저 해볼게요

코어 (Core)

코어는 CPU에서 실제로 일을 처리하는 녀석

CPU의 코어는 한 번에 한 가지 일만 처리할 수 있음

하지만 싱글 코어를 가진 컴퓨터라도 여러 작업을 동시에 처리할 수 있음

→ 여러 작업을 동시에 (문서작업, 음악 듣기 등) 하는 것 처럼 보이지만 사실은 일을 짧은 단위로 나누어서 번갈아 작업하는 것임 ( 속도가 빠를 뿐 )

위 처럼 여러가지 작업을 시분할로 나누어 번갈아 가며 처리하는 것을 동시성 프로그래밍이라고 함

스레드 (Thread)

2가지로 구분됨

  • 하드웨어에서의 스레드 : 하나의 코어로 2가지 작업을 동시에 수행할 수 있도록 하는 논리적인 ‘코어’. Ex) 1코어 2스레드 → 코어는 1개이지만 코어가 2개인 것 처럼 작업을 처리
  • 소프트웨어에서의 스레드: 논리적인 ‘스레드’ 프로세스 내부에서의 작업 단위가 되는 가상의 스레드. 프로그램의 작업을 처리하는 녀석들 →하나 혹은 여러 개 ( 멀티 스레드 )

동시성 프로그래밍이란 소프트웨어에서의 멀티 스레딩을 이용한 기술임

(소프트웨어 스레드는 가상으로 만들어진 스레드이기 때문에, 물리적인 스레드 갯수와 상관없이 많은 스레드를 만들 수 있음)

병렬 프로그래밍

병렬 프로그래밍과 동시성 프로그래밍은 무엇이 다를까

병렬 프로그래밍은 여러 개의 CPU(코어)가 하나의 작업(Task)를 분담해서 처리하는 것

병렬 프로그래밍은 물리적인 개념으로 CPU(코어) 가 여러 개 있을 때 가능함

병렬 프로그래밍은 직접 구현할 일은 없을 것(IOS) → 운영체제에서 알아서 처리해줌

동시성 프로그래밍은 여러 개의 코어가 아닌 스레드를 이용해 동시에 작업을 처리하는 것

동시성 프로그래밍 병렬 프로그래밍의 반대 개념은 아님

병렬은 다중 코어를, 동시성은 다중 스레드를 활용하는 것 ( 동시에 가능 )

동기와 비동기

동기 프로그래밍은 작업이 끝나기를 기다리는 것

A라는 코드 블록이 동기라면, A가 끝나야 다음 코드로 넘어감

비동기 프로그래밍은 작업이 끝나기를 기다리지 않고, 다음 코드 블록을 바로 실행 시키는 코드

A라는 코드 블록이 비동기라면, A를 기다리지 않고 다음 코드 시작

동시성

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

  1. 효율성 → 여러 스레드를 이용해서 일을 나누어 효율적인 작업 처리를 할 수 있게 함
  2. 사용성, 반응성 → 1번의 연장으로 사용성, 반응성이 좋아짐 → 예를들어, 한개의 스레드만 이용한다면 ? 서버에서 사진을 가져올 때 앱이 멈춘다 던가하는 문제 발생

Swift의 동시성 프로그래밍

Swift에서는 동시성 프로그래밍 구현하는 방법은 GCD, Operation, Concurrency (async/await, actor) 등이 있음

GCD → Operation → async/await 순으로 등장

GCD는 Operation의 근간이 되는 API 임.