GCD에 관하여 - 1

2023. 3. 8. 23:41IOS

반응형

하드웨어

코어

  • CPU는 코어라는 것을 가지고 있다.
  • 이 코어의 개수에 따라 싱글코어, 듀얼코어, 쿼드코어 등등으로 불리게 되는데, 코어란 무엇일까?
  • 코어는 모든 연산을 처리한다. 여기서 싱글코어와 듀얼코어를 비교하면 속도는 같지만, 한번에 하나의 일, 듀얼코어는 두개의 일을 처리한다.
  • 한가지의 일에 대해서는 싱글코어와 듀얼코어의 속도는 같으며 이 속도는 클럭이라고 표현한다, 다만 한번에 몇가지의 일을 처리할 수 있느냐가 코어의 수에 따라 큰 차이가 난다.

쓰레드

  • 쓰레드란 실질적으로 일을 하는 단위이다.
  • 하이퍼쓰레딩이라는 기술로 1코어에 2개의 쓰레드를 만들 수 있으며, 일반적으로는 1개의 코어가 1개의 쓰레드를 가진다
  • 하이퍼쓰레딩을 통해 4개의 코어를 가지고 있다면 8개의 쓰레드를 가지고 2개의 코어를 가지고 있으면 4개의 쓰레드를 가진다.

Context Switching

  • 만약 컴퓨터가 싱글코어라면 엑셀, 유튜브 이런것을 한꺼번에 할 수 없는걸까?
  • 그것은 아니다. 실제로 Context Switching이라는 것을 통해서 사용자가 인지를 할 수 없을 정도로 스위칭을 하며 멀티태스킹을 한다.
  • 싱글코어에 싱글쓰레드인데도 이게 어떻게 가능한 걸까?
  • 프로세스(=실행 중인 프로그램)는 하나 이상의 쓰레드에서 동작을 하는데, CPU 스케쥴링을 통해 하나의 CPU가 여러 작업들의 공유 시간을 나누어 작업을 수행한다.
  • A와 B 프로세스가 있다면 B를 실행하기 위해서는 A를 중단시키고 B로 스위칭을 한다.
  • 이를 Process Context Switching이라고 한다.

소프트웨어

쓰레드

  • 소프트웨어 쓰레드는 하드웨어 쓰레드에 비해 더 많은 쓰레드를 생성 가능하다.
  • 2코어 4쓰레드를 가진 기기를 사용중이어도 실제 소프트웨어 쓰레드는 10개 혹은 20개 혹은 그 이상을 만들수도 있다.
  • 프로그램의 작업을 처리하는 것을 의미하며, 하나의 작업을 여러 쓰레드를 통해 실행시켜 실행시간을 단축 시킬 수 있다.

병렬 프로그래밍

  • 병렬 프로그래밍은 여러 개의 CPU코어가 하나의 작업을 처리하는 것이다.
  • 이는 속도 제한이 있는 CPU에서 오래걸리는 작업의 시간을 단축 시키기 위하여 사용한다.
  • 이는 iOS내에서 운영체제가 직접 해주기 때문에 크게 신경 쓰지 않아도 된다.

  • 위와 같이 자동차조립이라는 작업이 있다면 이를 위해 자동차 문, 트렁크, 시트 조립 등을 서로 다른 코어에서 실행하는 것을 병렬 프로그래밍이라고 할 수 있다.

동시성(Concurrency) 프로그래밍

  • 동시성 프로그래밍은 하나의 코어가 여러 작업을 동시에 처리하는 것이다.
  • 이는 위에서 설명한 Context Switching을 사용하여 실제로는 하나씩 번갈아가며 실행 되지만 사람이 인지하지 못할 정도로 빠르게 일어나기 때문에 동시에 일어나는 것처럼 보여진다.

  • 위와 같이 하나의 코어가 여러 쓰레드를 거치면서 작업을 실행한다.

Serial 프로그래밍

  • 동시성과 반대되는 개념이다.
  • 동시성은 여러개의 쓰레드를 사용한다면 직렬프로그래밍은 하나의 쓰레드만을 이용한다.

  • 위와 같이 하나의 쓰레드만을 이용해 작업을 처리하고 순서대로 해당 작업을 처리한다.
반응형

'IOS' 카테고리의 다른 글

GCD에 관하여 - 3  (0) 2023.03.12
GCD에 관하여 - 2  (0) 2023.03.10
TableView Section 글자가 대문자로 변해요~  (0) 2023.02.25
Json Decoding 어떤 문제로 실패한걸까??  (0) 2023.02.25
NotificationCenter addObserver의 object활용  (0) 2023.02.13