동시성 프로그래밍

Martin·2023년 2월 18일

TIL 아카이브

목록 보기
7/11

코어

  • CPU의 핵심으로 CPU에서 실제로 일을 처리
  • 코어는 한번에 한 가지 일만 처리할 수 있음
  • 싱글 코어를 가진 컴퓨터라도 음악을 들으며 문서를 작성하는 등 여러 작업을 동시에 처리할 수 있는 이유는, 한 번에 처리하는 것처럼 보이는 것, 일을 짧은 단위로 나누어서 하나씩 번갈아가면서 하기 때문
  • 코어 처리하고 있는 일은 결국 한 번에 한 가지

    동시성 프로그래밍 : 코어가 여러 가지 작업을 시분할로 나누어 번갈아 가며 처리하는 것

스레드

하드웨어에서의 스레드

  • 하이퍼스레딩 기술을 이용하여 하나의 코어로 2가지 작업을 동시에 수행할 수 있도록 하는 논리적인 '코어'
  • 1코어 2스레드라면 실제로 코어는 1개이지만 코어가 2개인 것처럼 작업을 처리

소프트웨어에서의 스레드

  • 동시성 프로그래밍이란 소프트웨어에서의 멀티 스레딩을 이용한 기술
  • 소프트웨어에서의 스레드는 가상으로 만들어진 스레드이기 때문에 물리적인 스레드 갯수와는 상관없이 많은 스레드를 만들 수 있음

동시성 프로그래밍

  • 하나의 CPU가 여러 작업을 동시에 처리하는 것
  • 병렬 프로그래밍과 달리 싱글 코어에서도 가능한 논리적인 개념이지만, 물리적으로는 하나의 작업만 처리하는 환경
  • 여러 개의 스레드를 이용하여 동시에 여러 작업을 처리
  • 여러 가지 작업을 나열해두고 하나씩, 그리고 조금씩 번갈아가면서 작업을 처리하는 것
  • 속도가 매우 빨라서 동시에 작업을 처리하는 것처럼 보여집니다. 아주 빠르게 Context Switching을 하고 있는 것

병렬 프로그래밍

  • 여러 개의 CPU(코어)가 하나의 작업(Task)을 분담해서 처리하는 것
  • 많은 연산이 필요한 그래픽 처리나 머신 러닝에서는 병렬 프로그래밍이 적극적으로 사용됨
  • 물리적인 개념으로 CPU(코어)가 여러 개 있을 때에 가능
  • 싱글 코어에서는 병렬 프로그래밍이 불가능, 실제로 동시에 작업을 처리하는 것이기 때문

동기 (Synchronous)

  • 작업이 끝나기를 기다리는 것
  • A라는 코드 블록을 동기로 처리했다면 A라는 코드의 실행이 완전히 끝이나야 다음 코드로 넘어가는 것

비동기 (Asynchronous)

  • 작업이 끝나기를 기다리지 않고, 다음 코드 블록을 바로 실행시키는 코드
  • A, B라는 작업이 나열되어 있고 A를 비동기 처리해주었을 때 A를 기다리지 않고 바로 B 작업을 시작

동시성, 동기/비동기

완전히 다른 의미

  • 동시성 : Serial이냐, Concurrent인가는 스레드가 단일 스레드인가, 다중 스레드인가의 구분
  • 동기/비동기 : 스레드의 수와는 무관하게 작업이 끝나기를 기다리냐, 기다리지 않느냐의 구분

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

  • 효율적인 동작
    • 동시성 프로그래밍을 하지 않으면 모든 일을 하나의 스레드에서 담당
    • 소프트웨어가 더 쾌적하고 효율적으로 동작
    • 최적화
  • 사용성, 반응성
    • 사용자들에게 보다 나은 사용성을 제공

Swift와 동시성 프로그래밍

GCD(Grand Central Dispatch), Operation, async/await

GCD -> Operation -> async/await 순서로 개발

profile
제로부터 시작하는 이세계 Swift

0개의 댓글