꾸준히 안타치기

Dispatch Queue / Thread 본문

iOS/Basic Study

Dispatch Queue / Thread

글자줍기 2022. 8. 26. 15:12
반응형

Grand Central Dispatch 란? 

어느 작업을 어느 Thread 가 할 것인지, Multi-Thread 로 할 것인지,

코어를 여러개 사용해서 처리할지, Async 로 처리할지 등등을 결정해주는 것이 바로 GCD 이다.

Queue에는 - Serial / Concurrent 두가지가 있다.

  • Serial큐는 - 직렬순차실행 큐
  • Concurrent큐 - 병렬형태로 동시에 실행되는 큐이다.

Grand Central Dispatch란? 멀티코어 프로세스를 위한 Thread Programming

기존에 Thread Programming 을 하기 위해서는

동기화 및 , deadlock 도 관리를 하는 등 스레드풀을 직접 관리해야하는 번거로움이 있지만

애플에서 따로 GCD를 통해 쓰레드를 OS에서 관리하고 분배한다.

Grand Central Dispatch 를 사용하는 이유?

어느 작업을 어느 Thread 가 할 것인지, Multi-Thread 로 할 것인지,

코어를 여러개 사용해서 처리할지, Async 로 처리할지 등등을 결정해주는 것이 바로 GCD 이다.

Dispatch

Execute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.

(시스템에서 관리하는 디스패치 대기열에 작업을 제출하여 멀티코어 하드웨어에서 동시에 코드를 실행한다.)

iOS 8.0+iPadOS 8.0+macOS 10.10+Mac Catalyst 13.0+tvOS 9.0+watchOS 2.0+

Overview

Dispatch, also known as Grand Central Dispatch (GCD), contains language features, runtime libraries, and system enhancements that provide systemic, comprehensive improvements to the support for concurrent code execution on multicore hardware in macOS, iOS, watchOS, and tvOS.

The BSD subsystem, Core Foundation, and Cocoa APIs have all been extended to use these enhancements to help both the system and your application to run faster, more efficiently, and with improved responsiveness. Consider how difficult it is for a single application to use multiple cores effectively, let alone to do it on different computers with different numbers of computing cores or in an environment with multiple applications competing for those cores. GCD, operating at the system level, can better accommodate the needs of all running applications, matching them to the available system resources in a balanced fashion.

(Core Foundation 및 Cocoa API는 모두 이러한 향상된 기능을 사용하여 시스템과 응용 프로그램이 더 빠르고 효율적이며 향상된 응답성을 제공하도록 확장되었습니다.시스템 수준에서 작동하는 GCD는 실행 중인 모든 응용 프로그램의 요구 사항을 더 잘 수용하여 균형 잡힌 방식으로 사용 가능한 시스템 리소스와 일치시킵니다.)

 

main(serial) Queue global (concurrent) Queue custom Queue
메인쓰레드에서 처리되는 시리얼큐 형태
UIkit의 모든요소는 메인큐에서 수행해야함
전체 시스템에 공유되는 큐
Qos를 통해서 작업의 우선순위를 결정
(Quality of Service - DispatchQueue에서 수행 할 작업을 분류하기 위해 사용됨)
임의로 만들어서 큐를 생성해서 사용
보통은 시리얼 큐를 만들때 메인큐에서 처리하지 못할 내용들을 빼서 작업시 사용하게 된다.
앱의 메인 쓰레드에서 task를 처리하는 전역적
으로 사용가능한 큐 형태이다.
Qos로 중요도를 표시, 시스템이 우선순위를 정하고 이에 따라 스케줄링한다. 만들어진 큐는 Global Queue에서 수행
 
  1. userInteractive
  2. userInitiated
  3. default
  4. utility
  5. background
  6. unspecified
 
sync async
큐에 작업 추가시 - 순차적으로 기다렸다 진행 작업을 큐에 추가하고 동시에 다른 작업을 할수 있음
다끝날때까지 기다렸다가 진행함  

 

https://developer.apple.com/documentation/DISPATCH

https://i-colours-u.tistory.com/11


프로세스 :  컴퓨터가 어떤일을 하고 있는 상태

동시성

병렬성

더보기

비동기(Asynchronous) 프로그래밍

기다리지 않고 바로 다음 작업을 실행 . 병렬적 

동기란? 비동기란? 

https://bluedogs.tistory.com/143

동시성(Concurrency) 프로그래밍 /  비동기

동시에 실행되는 것 처럼 보이는 것. 여러 쓰레드가 번갈아가면서 실행되는 방식

병렬성(Parallelism) 프로그래밍 / 비동기

물리적으로 정확히 동시에 실행되는 것. 

물리적으로 동시에 정확히 동시에 실행되는 것을 말합니다. 멀티 코어에서 멀티 스레드를 동작시키는 방식으로 데이터 병렬성(Data Parallelism)과 작업 병렬성(Task Parallelism)으로 구분됩니다.

  • 데이터 병렬성 : 전체 데이터를 나누어 서브 데이터들로 만든 뒤, 서브 데이터들을 병렬 처리해서 작업을 빠르게 수행하는 방법입니다.
  • 작업 병렬성 : 서로 다른 작업을 병렬 처리하는 것을 말합니다.

 

 

동시성(Concurrecny)과 병렬성(Parallelism) 차이

동시성 프로그래밍과 병렬성 프로그래밍 모두 비동기(Asynchronous) 동작을 구현할 수 있지만, 그 동작 원리가 다릅니다. 아래 그림처럼 비유해 볼 수 있습니다.

  • 동시성(Concurrecny) : 통장을 만들러 온 N개의 대기열과 한 명 이상의 은행직원
  • 병렬성(Parallelism) : 통장을 만들러 온 N개의 대기열과 N명의 은행직원
 
즉, 동시성은 싱글코어 및 멀티코어에서 모두 구현할 수 있지만, 병렬성은 멀티 코어에서만 구현할 수 있습니다.

 

iOS 환경 동시성 프로그래밍 지원 종류

  • Grand Central Dispatch (GCD) : 멀티 코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술입니다.
  • 연산 대기열 (Operation Queue) : 비동기적으로 실행되어야 하는 작업을 객체 지향적인 방법으로 사용합니다.
  • Thread : 멀티스레드 프로그래밍을 위한 애플에서 제공하는 스레드 클래스입니다.

https://www.boostcourse.org/mo326/lecture/16866/?isDesc=false 

 

컴퓨터는 여러개의 프로세스를 돌릴 수 있게 됨

한 프로세스 내에서도 여러갈래의 작업들이 동시에 진행될 필요가 있는데 이 하나하나의 작업을 스레드라고 한다.

프로세스는 요리사 / 끊임없이 만들어내는 각각의 메뉴들은 스레드라고 비유할 수 있다.

스레드 :  하나의 프로세스 내에서 실행되는 작업흐름의 단위

쓰레드란, 동시작업을 위한 하나의 독립적인 실행단위입니다.

쓰레드는 하나의 프로세스안에서 동시에 수행되어야 하는 작업을 위해서 필요합니다.

 

컴퓨터는 프로세스마다 자원을 분할해서 할당한다.

프로세스는 컴퓨터의 자원을 분할해서 쓰지만 스레드는 프로세스마다 주어진 전체 자원을 함께 사용한다.

  • 장점 : 속도와 효율성이 좋다.
  • 단점 : 동시에 실행했을때, 시간문제로 발생하는 문제가 생길 수 있다. 오류찾고 원인을 찾기가 까다롭다. but 이것을 안전하고 쉽게 해주는 도구와 프로그래밍 방식들이 존재한다.(  closure, FunctionalProgramming, Lambda, Actor ..)

 

https://youtu.be/iks_Xb9DtTM  얄코

 

 


프로세서

프로세서는 하드웨어적인 측면에서 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛입니다. 대표적으로 중앙처리장치(Central Processing Unit - CPU)가 이에 속합니다. 한 컴퓨터가 여러 개의 프로세서를 갖는다면 멀티 프로세서라고 말합니다. 듀얼 프로세서라고 한다면 한 컴퓨터에 두 개의 프로세서가 운용된다고 할 수 있습니다.

 

코어

프로세서에서 코어는 주요 연산회로입니다. 싱글코어는 말 그대로 하나의 연산회로가 내장되어있는 것이고 듀얼코어는 두 개의 연산회로가 내장된 것을 뜻합니다. 또, 여러 개의 코어를 가진 프로세서를 멀티 프로세서라고 합니다.

 

프로그램(Program)과 프로세스(Process)

프로그램은 일반적으로 보조기억 장치에 저장된 실행코드 즉, 생명이 없는 상태를 말합니다. 프로세스는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위를 말합니다. 동시에 여러 개의 프로세스를 운용하는 시분할 방식을 멀티태스킹이라고 합니다. 이러한 프로세스 관리는 운영체제에서 담당합니다.

 

스레드(Thread)

스레드는 하나의 프로세스 내에서 실행되는 작업흐름의 단위를 말합니다. 보통 한 프로세스는 하나의 스레드를 가지고 있지만, 프로세스 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있습니다. 이러한 방식을 멀티스레딩이라고 합니다. 그리고 프로그램 실행이 시작될 때부터 동작하는 스레드를 메인 스레드라 하고 그 외에 나중에 생성된 스레드를 서브 스레드 또는 세컨더리 스레드라고 합니다.

 

https://www.boostcourse.org/mo326/lecture/16866/?isDesc=false 야곰부스트코스


https://www.youtube.com/watch?v=1grtWKqTn50 

 

출처: https://bluedogs.tistory.com/395 [꾸준히 안타치기:티스토리]

반응형
Comments