Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

<2주차> NSOperationQueue 와 GCD Queue 의 차이점을 설명하시오 #7

Closed
namsoo5 opened this issue Nov 7, 2020 · 8 comments
Closed

Comments

@namsoo5
Copy link
Collaborator

namsoo5 commented Nov 7, 2020

No description provided.

@namsoo5 namsoo5 added the 남수 label Nov 11, 2020
@namsoo5
Copy link
Collaborator Author

namsoo5 commented Nov 11, 2020

NSOperationQueue
→ 동시에 실행할수있는 연산의 최대수 지정가능
→ Key Value Observing(KVO)를 사용할수있는 많은 프로퍼티들이 있음
→ 일시중지, 다시시작, 취소가능
→ 디폴트 concurrent

GCD Queue
→ C기반
→ 가벼움
→ 디폴트 serial

Operation Queue : 비동기적 실행작업을 객체 지향적인 방법으로 사용하는데 적합
Dispatch Queue : 작업이 복잡하지않고 간단하게 처리하거나 특정유형 시스템이벤트 비동기처리시 적합(ex: 타이머, 프로세스 )

참고링크

@iJoom
Copy link
Collaborator

iJoom commented Nov 12, 2020

NSOperationQueue

  • Objective-C 기반 고수준 API
  • GCD보다 약간의 오버헤드가 더 발생되고 느리다. But KVO 지원 및 작업취소등을 지원
  • 다양한 작업들 중에서 의존성을 추가할 수 있다
  • 재사용, 취소, 중지 가능하다
  • NSOperation을 만들어서 병렬 or 직렬로 스레드 풀을 사용가능하다.

GCD Queue

  • C기반 로우레벨의 API
  • Global Queue에서 QOS 우선순위를 줄 수 있다.
  • Main Queue: 메인 스레드에서 사용될 것 들을 처리, UI코드
  1. Dispatch Queues: 디스패치 큐는 FIFO 순서로 작업을 실행시키는 역할을 담당
  2. Serial Dispatch Queue: 시리얼 디스패치 큐는 한번에 한 작업만 실행
  3. Concurrent Dispatch Queue: 컨커런트 디스패치 큐는 시작한 작업이 끝나는것을 기다리지 않고 가능한 많은 작업을 실행
  4. Main Dispatch Queue: 앱의 메인 스레드에서 작업을 실행할 수있는 전역에서 사용가능한 시리얼 큐

@iJoom iJoom added the 인준 label Nov 12, 2020
@dongminyoon
Copy link
Collaborator

GCD

  • GCD는 C 기반으로 이루어진 저수준 API를 제공하는 라이브러리이다.

NSOperation

  • NSOpertaionQueue는 Objective-C 기반의 고수준 API을 제공하는 라이브러리다.
  • 작업들을 정지하고 재시작할 수 있다. 그러나 GCD는 불가능하다.
  • 대기열에 들어갈 수 있는 작업의 숫자를 지정함으로써 동시에 작업의 수를 지정할 수 있다.

@choidam
Copy link
Member

choidam commented Nov 13, 2020

NSOperationQueue

  • Object C API 를 사용합니다. (고수준의 API. GCD에 비해 무거움)
  • 작업들에 대해 의존성 추가, 재사용, 취소, 중지 시킬 수 있습니다.

GCD

  • C API 를 사용합니다. (저수준의 API)
  • 작업 취소를 구현할 수는 있지만 부수적인 코드가 많이 작성됩니다.
  • 우선순위를 가지지만 같은 순위에 대해서는 직접적인 방법이 없습니다. 개별 블럭이 아닌 전체 큐에 대한 우선순위를 정합니다.

@choidam choidam added the label Nov 13, 2020
@Juhyeoklee
Copy link
Collaborator

iOS에서 백그라운드 작업을 수행하는 방법은 GCD를 활용한 방식이 있지만

NSOperation이라는 방식도 존재합니다.

이 NSOperationQueue이 무엇인지 GCD와의 차이점이 무엇인지 간단하게 알아보겠습니다.

가장 큰 차이는 GCD 에서는 C 기반의 API 이고, NSOperationQueue는 Objective C 기반의 API라는 점 입니다. 따라서 NSOperation Queue가 좀 더 무겁긴데 이 NSOperationQueue를 사용할 경우 내부의 태스크에 대한 제어를 행사할 수 있습니다.

먼저 이 큐 안에서 Cancel을 통해 task를 취소하거나 재사용할 수 있습니다.

그리고 task의 상태를 Observing하여 취소되었는지, 끝났는지를 확인할 수 있습니다.

또한 task의 의존성을 지정하여 큰 작업을 다양한 작업으로 분리하여 처리할 수 있도록 할 수 있습니다.

@5anniversary
Copy link
Collaborator

GCD

  • C 기반의 로우레벨 API

NSOperationQueue

  • Obj-c 기반의 API ( C기반의 GCD 저수준 API에 비해 무겁다. )

가벼운 GCD 와 비교해 좀 더 유용하게 사용할 수 있는 부분

  • 작업 취소 : NSOperationQueue는 NSOperation의 Cancel을 통해 작업을 취소할 수 있도록 제어가 가능.
  • KVO : NSOperation은 isCancelled, isFinished등 작업의 상태가 변경되었는지를 알 수 있으며 좀 더 세세한 작업이 가능함.
  • 작업의 재사용 : NSOperation의 자식 클래스를 만들어서 원하는 형태로 작업이 가능하며 작업이 끝나더라도 재사용 가능.
  • 작업 우선순위 : 각 작업은 우선순위가 있으며 작업들간의 우선순위를 매깁니다. 우선순위가 높은 작업이 우선순위가 낮은 작업보다 먼저 수행됨.
  • 작업 간의 의존성 : 작업이 수행한 후 다른 작업이 수행할 수 있도록 작업 계층을 만들 수 있음.

@elesahich
Copy link
Collaborator

@elesahich elesahich added the 승호 승호 label Nov 13, 2020
@khyunjiee
Copy link
Member

GCD (Grand Central Dispatch) NSOperationQueue
C기반 저수준 API Obj-C 기반 고수준 API
NSOperation보다 빠르고 오버헤드가 적음 GCD보다 느리고 조금의 오버헤드 발생
Block Coding으로 단순 구현이 쉬움 다양한 작업들에 의존성 추가 가능
KVO 관찰, 작업 취소 등을 지원 Task 재사용, 취소, 중지 가능
큐 우선순위 제공 작업의 우선순위 제공
  복잡한 로직 구현과 코드 재사용성이 높음

GCD (Grand Central Dispatch)

백그라운드에서 스레드를 관리하면서 작업을 실행시키는 저수준 API를 제공하는 라이브러리

  • Dispatch Queue : FIFO 순서로 작업을 실행
  • Serial Dispatch Queue : 한 번에 한 작업만 실행
  • Concurrent Dispatch Queue : 작업이 끝나는 것을 기다리지 않고 가능한 많은 작업 실행 (병렬)
  • Main Dispatch Queue : 앱의 메인 스레드에서 작업할 수 있는 전역에서 사용 가능한 시리얼 큐

NSOperationQueue

NSOperation들을 만들어서 병렬로 실행시키는 스레드 풀을 제공
GCD의 일부는 아님

  • NSOperation을 동시에 실행하도록 구현 가능함. serial도 가능

  • NSOperation끼리 의존 관계를 만들어서 실행 순서를 정할 수 있음 -> 작업의 계층을 만들 수 있음

  • CompletionBlock을 이용해 Operation의 실행이 마무리되고 실행해야할 로직을 설정할 수 있음
    (But, return Value는 사용 불가)

  • 작업 큐를 사용해 작업 취소 가능

  • 작업 클래스는 코드 내에서 재사용 가능

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants