NSOperation VS Grand Central Dispatch

NSOperation vs. Grand Central Dispatch (GCD)

You may have heard of Grand Central Dispatch (GCD). In a nutshell, GCD consists of language features, runtime libraries, and system enhancements to provide systemic and comprehensive improvements to support concurrency on multi-core hardware in iOS and OS X. If you’d like to learn more about GCD, you can read our Multithreading and Grand Central Dispatch on iOS for Beginners Tutorial.

GCD라는 것을 들어봤을 것이다. 간략하게 설명하자면, GCD는 언어 기능과 런타임 라이브러리, 그리고 iOS와 OS X이 작동하는 멀티-코어 하드웨어 위에서 동시성을 지원해주는 시스템 강화 기능등으로 구성되어 있다. 만약 GCD에 대해 더 자세한 것을 알길 원한다면 블로그 ‘Multithreading and Grand Central Dispatch on iOS for Beginners Tutorial.’를 읽어보길 권유한다.

Before Mac OS X v10.6 and iOS 4, NSOperation and NSOperationQueue were different from GCD and used two completely different mechanisms. Starting with Mac OS X v10.6 and iOS 4, NSOperation and NSOperationQueue were built on top of GCD. As a very general rule, Apple recommends using highest-level abstraction, and then dropping down to lower-levels when measurements show they are needed.

OS X 10.6과 iOS 4 이전 버전에서는 NSOperation과 GCD의 메카니즘은 전혀 달랐다. 하지만 Mac OS X 10.6과 iOS 4 버전에서 부터 NSOperation과 NSOperationQueue는 GCD 위에서 설계되었다. 보통 애플은 개발자들에게 상위 레벨에 추상화 된 레이어를 먼저 사용하길 권유하고 있다. 그리고 나서 필요에 따라 낮은 레벨의 추상화된 기능들을 쓰길 권고한다. 

Here’s a quick comparison of the two that will help you decide when and where to use GCD or NSOperation and NSOperationQueue:

그럼 GCD를 써야 할지 혹은 NSOperation과 NSOperationQueue를 써야 할지 고민하는 당신을 돕기 위한 비교한 내용을 살펴보자.

  • GCD is a lightweight way to represent units of work that are going to be executed concurrently. You don’t schedule these units of work; the system takes care of scheduling for you. Adding dependency among blocks can be a headache. Canceling or suspending a block creates extra work for you as a developer! :]
  • GCD는 동시에 실행하려는 작업 단위를 대표 할 수있는 경량의 방법이다. 해당 작업 단위는 개발자가 직접 스케줄하지 않고 시스템이 스케줄 관리를 해준다. 블럭들 사이에서 의존성을 부여하는 것은 쉽지 않은 일이며, 작업 취소 혹은 일시정시 같은 일을 하기 위해서는 각 개발자가 개인별로 추가해야한다.
  • NSOperation and NSOperationQueue add a little extra overhead compared to GCD, but you can add dependency among various operations. You can re-use operations, cancel or suspend them. NSOperation is compatible with Key-Value Observation (KVO); for example, you can have an NSOperation start running by listening to NSNotificationCenter.
  • NSOperation과 NSOperationQueue는 GCD에 비해 추가적인 기능을 제공하며 여러 operation에 의존성을 부여할 수도 있다. 뿐만 아니라 재사용도 가능하며 취소 혹은 일시정지와 같은 기능도 가능하다. NSOperation은 KVO 기술을 완벽하게 사용할 수 있다. 그래서 NSOperation이 실행되기 시작하면 NSNotificationCenter를 통해 상태 변화에 대한 노티를 받을 수 있다. 

from http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues

Leave a Comment.