GCD, Operation

Groot·2022년 12월 16일
0

TIL

목록 보기
111/148
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 면접스터디

📍 GCD API 동작 방식과 필요성

  • serial queue 방식 - main_queue
    • 단일 작업'들'을 순차적으로 '하나씩'실행하는 것
    • Serial Queue는 한 번에 하나의 Task만 실행
  • concurrent queue 방식 - global_queue
    • 동시에 하나 이상의 큐 처리 (동시적 처리이지 병렬적 처리가 아님)
    • 한 번에 여러 개의 Task를 실행
  • sync
    • 하나의 작업이 끝나기 전까진 다른 작업을 수행하지 못함
  • async
    • 하나의 작업이 끝나기 전에 다음 작업을 수행한다.
  • 내부 실행
    • 애플리케이션이 작업을 블록 단위 형식으로 관리한다.
    • 큐에 들어오는 작업을 순차적으로 실행한다.
    • 작업은 동기, 비동기식으로 예약한다.

🔗 필요성

  • GCD를 사용하지 않으면 스레드 생성, 유지, 삭제 등을 개발자가 모두 처리해야 하기 때문에

https://jinshine.github.io/2018/07/09/iOS/GCD(Grand%20Central%20Dispatch)/
https://www.notion.so/GCD-API-65882583e57f4d798a33ad8a25ac5fad
https://babbab2.tistory.com/64


📍 Global Dispatch Qos

  • User Interactive: 사진을 스크롤하거나 로드하는 것과 같이 UI 스레드를 업데이트하는 작업을 적극적으로 수행
  • User Initiated: 사용자 상호 작용이 필요한 작업을 수행 , 사용자가 시작하고 즉각적인 결과를 가져와야 하는 작업
  • Utility: 일부 배경 콘텐츠를 다운로드하는 것과 같이 사용자가 인식하지 못하는 작업을 수행, 약간의 시간이 걸리고 바로 완료할 필요가 없는 작업
  • Background: 사용자에게 표시되지 않는 작업. (백업, 동기화, 인덱싱)

https://medium.com/the-traveled-ios-developers-guide/quality-of-service-849cd6dee1e


📍 NSOperation과 GCD의 차이

  • Operation은 GCD를 상위 수준으로 추상화한 api
  • GCD는 비교적 가볍고 NSOperation는 복잡하고 무거운 편이다.
  • Operation은 의존성을 제공
    • NSOperation은 두 작업(operations) 사이에 의존관계를 설정하여 여러개의 작업에 대한 종속성을 가질 수 있다.
    • 하나의 작업이 다른 작업에 의존성을 갖고 있다면 이 작업은 해당 작업들이 모두 끝난 후에 작업을 시작할 수 있다.
  • Operation과 OperationQueue 클래스는 KVO를 통해 관찰될 수 있는 프로퍼티를 제공
    • NSOperation은 작업(operation)의 상태를 ready, isCanceld, executing, finished로 구분하는데 이 여러 상태들을 모니터링 가능
  • Operation이 보다 작업의 Life cycle에 대한 유연함을 제공
    • NSOperation에 대한 pause, cancel, resume이 가능하다.
  • Object_C 기반이고, 고수준 API라서 오버헤드가 존재한다.

🔗 언제 무엇을 사용?

  • 큐에 있는 작업들에 대해 좀 더 다양하고 미세한 컨트롤이 필요하다면 NSOperation을, 적은 오버헤드로 단순한 작업들을 멀티스레드 환경에서 수행시키고 싶은 것이라면 GCD를 사용한다.

https://baked-corn.tistory.com/134
https://betterprogramming.pub/the-complete-guide-to-concurrency-and-multithreading-in-ios-59c5606795ca


📍 멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식들

  • 동기, 비동기
  • 직렬, 동시
  • 변수를 비동기로 여러 스레드에서 접근해야 한다면 어떻게 관리해야 할 지
  • 특정 기능을 비동기 처리로 구현한다면, 우선순위를 정해야 할 지
  • GCD를 사용해야 할 지 Operation을 사용해야 할 지
  • 기능에 UI 업데이트를 포함하고 있는지
profile
I Am Groot

0개의 댓글