꿀똥벌레
꿀똥벌레 개발 블로그
꿀똥벌레
전체 방문자
오늘
어제
  • 분류 전체보기 (90)
    • JAVA (17)
    • SPRING (14)
    • Elasticsearch (4)
    • GRADLE (2)
    • HTML, CSS (0)
    • JAVASCRIPT (0)
    • GIT (1)
    • Vue.js (1)
    • server (1)
    • Python (0)
    • IT리뷰 (0)
    • 인프라 (6)
    • IOS (21)
    • 디자인패턴 (20)
    • Kafka (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • maxConnTotal
  • spring
  • 엘라스틱서치
  • persistent connection
  • 인덱스 템플릿
  • ES
  • spring integration
  • Index Template
  • persistence connection
  • 스프링 인테그레이션
  • mappings
  • springintegration
  • elasticsearch
  • maxConnPerRoute
  • 스프링 인티그레이션
  • Index
  • KEEPALIVE
  • SWIFT
  • connectionRequestTimeout
  • java

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
꿀똥벌레

꿀똥벌레 개발 블로그

IOS

Swift GCD

2023. 2. 2. 10:31

GCD: Grand Central Dispatch

  • 멀티코어 시스템에서 concurrent 실행을 제공하는 프로그래밍 언어 요소
  • DispatchQueue 는 Swift 의 GCD 중 하나이다.

Serial, Concurrent

Serial

큐에 추가된 순서대로 한번에 하나의 task를 실행한다.

DispatchQueue("myLabel")

Concurrent

운영체제는 DispatchQueue에서 꺼낸 현재 작업이 끝나지 않더라도, 다음 작업을 다른 스레드에 할당시켜 실행한다.

DispatchQueue(label: "", attributes: .concurrent)

DispatchQueue (Main, Global, Custom)

Main dispatch Queue(DispatchQueue.main)

  • 앱의 메인 쓰레드에서 Task를 실행하는 단 하나뿐인, 전역적으로 사용 가능한 serial queue이다.
  • 화면 위에 보여지는 앱 요소(UI 업데이트 등) 는 메인 스레드에서 이루어진다.
    따라서 UI업데이트와 관련된 작업은 메인 큐에서 할당되어야 한다.
  • 메인 스레드는 하나이기 때문에 DispatchQueue.main.sync 를 호출하면 안된다.(앱이 뻗는다..)

DispatchQueue.global(qos: DispatchQoS.QoSClass = default)

  • 글로벌 큐의 경우 concurrent 특성을 가진다. 따라서 여러개의 스레드에 분산되어 작업을 실행한다.
  • global은 qos(quality of service) 파라미터를 받는다.qos 의 종류(큐의 중요도를 Enum 파라미터로 넣을 수 있다.)
userInteractive
userInitiated
default
utility
background
unspecified

Custom Queue

let myQueue = DispatchQueue(label: "myQueue")
- 이렇게 label 파라미터만 주면 Serial Queue가 생성 된다.
let myQueue = DispatchQueue(label: "myQueue", attributes: .concurrent)
- 이렇게 명시적으로 지정을 해줘야 concurrentQueue 가 생성이 된다.

Sync, Async

앞에서 설명했던 Serial과 Concurrent는 큐에 대한 속성으로, task 실행을 하나의 스레드에 몰아서 순차적으로 주느냐, 여러개의 스레드에게 주느냐. 즉 스레드의 이용에 대한 부분이다.
Sync와 Async는 큐로 넘겨지는 각각 단일task가 실행되면, task가 끝까지 종료되고 리턴되느냐(sync) 즉시 리턴되느냐(async)의 차이이다.

저작자표시 (새창열림)

'IOS' 카테고리의 다른 글

SwiftUI onDelete 수정자 사용  (0) 2023.02.25
SwiftUI ViewBuilder란  (0) 2023.02.17
ObservableObject 와 Codable 같이 사용하기  (1) 2022.12.31
Swift enum  (0) 2022.12.31
Swift 에러 핸들링 (try, catch, throw, throws, do)  (0) 2022.12.28
    꿀똥벌레
    꿀똥벌레
    개발자 꿀똥벌레 입니다.

    티스토리툴바