GCD & Operation

soooooyeon·2021년 5월 1일
0

*본 게시물은 https://zeddios.tistory.com/509 를 참고해 작성하였습니다.

동시성을 구현하기 위해서는 스레드를 구현해야 하는데, 프로그래머가 직접 스레드를 만들어 수동으로 관리하는 것을 귀찮은 일이다.
따라서, OS X와 iOS에서는 유저가 직접 스레드를 구현하는 것보다, 태스크를 정의하면 시스템이 알아서 이를 수행하도록 하는 방식을 채택하고 있다.

  • 스레드를 활용해 동시성 프로그래밍을 할 때 불편한 점
    • 시스템 조건이 변경됨에 따라, 동적으로 생성하고 조정할 쓰레드 수를 결정해야 한다.
      • ex) 몇개의 스레드를 돌렸을 때 제일 성능이 좋은지, 유저가 결정해야 함
    • 앱이 쓰레드를 생성하고 유지보수하는 데 드는 비용의 대부분을 떠맡는다

1. GCD (Grand Central Dispatch)

  • GCD란 멀티 코어, 멀티 프로세서 환경에서 프로그래머가 보다 편리하게 개발을 할 수 있도록 애플에서 개발한 기술
  • GCD를 이용하면, 스레드의 조작 및 생성을 운영체제에서 관리하게 됨
  • 프로그래머는, 태스크를 큐에 넣어주기만 하면 된다.
  • 프로그래머는 직접 스레드의 생성에 대해 관여할 필요가 없다 !
  • 애플에서는, 동시성을 위한 조작을 할 때, mutex나 세마포어, lock 등의 방법보다 GCD에 의존하는 것을 추천함

Dispatch Queue

  • GCD에서 사용하는 queue
  • Concurrent Queue VS Serial Queue
  • 디스패치 큐의 종류
    • Main queue : 메인 스레드에서 실행되어야 하는 작업 ex) UI작업, serial queue
    • Global queue : 메인 스레드에서 실행되지 않아도 되는 작업,
    • Custom queue : 프로그래머가 직접 커스텀한 큐를 만들 수도 있음

2. Operation Queue

  • 하나의 태스크와 관련된 코드와 작업을 나타내는 추상화된 클래스, 직접적으로 사용하지는 않고 subclass를 만들어서 사용함
  • dispatch queue와 다른 점??
    • 태스크의 priority를 지정할 수 있음
    • addDependency를 통해 일의 순서를 지정할 수 있음!!! gcd에서는 제공하지 않는 아주 매력적인 기능 중에 하나 == 태스크 간의 순서 보장 가능
    • dispatch queue에 비해서 사용이 복잡함
profile
Junior iOS developer

0개의 댓글