[IOS] Concurrency

East Silver·2021년 10월 13일
0

Timer & Runloop

  • Timer
    - 생성자 이용
    - +
  • Runloop (Event Processing Loop)
    : Theard에서 발생하는 Event source를 감시합니다. Theard를 깨운 다음 Runloop로 event를 전달합니다. +
    - 생성자로 timer를 생성 할떄는 Runloop에 추가 한 다음 fire 메소드를 직접 호풀 해야 한다.
  • Timer 구현 주의사항
    - 타이머가 중복되는 것을 막기위해
    -> 이미 생성된 타이머가 있을때 다른 타이머가 생성되는걸 막거나 이전 타이머를 중지시켜야 한다.
    -> 화면을 나올때도 중지시켜야 한다.
    -> 화면이 전환되서 돌아올때는 새로운 타이머를 시작해야 한다
  • 허용오차 설정
    - 배터리 절약
    • 터치에 대한 반응성 향상

Concurrency Programming in iOS

  • Operation, GCD 개요
  • Main Thread와 Background Thread
  • Queue
  • 동시성 문제 해결 패턴
  • Thread 클래스 활용

Operation & Operation Queue

  • Operation : 하나의 작업을 나타내는 객체

    • block Operation, custom Operation
    • 장점
      • Interoperation Dependencies - 의존성을 추가해서, 실행 순서 제어
      • cancellation - 실행 취소 기능
      • Completion Handler를 추가하는데 필요한 API 제공
    • single-shot Object : 실행이 완료된 인스터스는 다시 실행 할 수 없다.
      • 4가지 실행 상태
        • Ready, Excuting, Finished, Cancelled
          ✅ Finished, Cancelled에서 Ready로 갈 수 없다.
  • Operation 클래스를 통한 Task 캡슐화
    - queue 생성방법

    let queue = OperationQueue.main //main queue
    let queue = OperationQueue() //background queue
  • 취소 구현
    - 시작되지 않은 작업은 언제든지 취소 할 수 있지만, 실행 중이라면 취소기능이 구현되어 있어야 취소 할 수 있다.
//취소 구현
  • Operation Queue 사용 패턴
    - Operation을 Queue로 관리
  • 우선 순위 설정
    • queuePrority : 동일한 queue에 들어있는 operation 우선 순위
      • .VeryHigh, .high, .normal, .low, .veryLow
        (총 5단계, 설정하지 않으면 기본값은 normal)
    • Quality of Service(QoS) : 리소스 사용 우선 순위
      • .userInteractive, .userInitiated, .utility, .background
        (기본값은 .background)
  • Completion Block

Interoperation Dependencies

  • 의존성 API
    - 단방향, 상호 의존 불가능
    • API 3가지 add remove dependencies
  • "다운로드 op -> 리사이징 op -> 필터 op -> reload op " 작업 사이에 의존성을 추가하는 예제 구현
  • Main Queue에 추가된 작업 취소 방법
  • 최대 실행 작업 수 설정

GCD - Grand Central Dispatch

  • GCD 개요
    - Efficient
    • Fast
    • Simple
  • Dispatch Work Item
    - Work-Queue Programming Model :
  • Concurrent Dispatch Queue
    - 동시에 실행, 작업수는 알아서
    • concurrent option,global
  • Serial Dispatch Queue
    - 하나씩 실행
    • 큐기반 동기화에 이용
  • QoS(=Quality of Service)
    - 위 내용과 동일
  • async와 sync 비교
  • 지연 실행 구현
  • 병렬 실행 구현
profile
IOS programmer가 되고 싶다

0개의 댓글