많은 데이터를 NSDictionary
에서 NSManagedObjects
(3k-10k 개체)으로 처리해야합니다. 동기 처리와목표 C 및 스레딩
은 3K는 약 60 초 취
for (NSString *key in myDictionary) {
//process data
}
I는 GCD를 사용하여 각 키에 대해 새로운 스레드를 만들고이 약 20 초 정도가 스레드의 무리 사용했을
for (NSString *key in myDictionary) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//process data
}
}
을
012 :
그러면 I은 약 30 초 만 사용했다 2 스레드 블록의 실행을 추가로 NSBLockOperation
각 키를 사용하여 시도 NSOperationQueue
이렇게하면 완료 블록을 가질 수 있다는 이점이 있습니다.
속도면에서 볼 때 키당 스레드가 가장 빠른 것 같습니다.
모든 시간은 시뮬레이터가 아닌 기기에서 수행됩니다.
내가 NSOperation
대 GCD를 고려했을 때, 그들은 NSOperation
인 더 높은 수준의 API를 사용할 것을 제안했지만, GCD가 더 나은 성능을 제공합니다.
완료 블록 이외의 NSOperationQueue
및 NSBlockOperation
을 사용하면 어떤 장점이 있습니까? 아니면 큐와 블럭이 본질적으로 GCD보다 나은 무언가를 놓치고 있습니까?
관련 : http://stackoverflow.com/questions/18632271/what-is-the- 차이점 - nsinvocationoperation - and - nsblockoperation –
Objective-C에서 스레딩을 수행하는 방법은 약 6 가지입니다. 다른 것들보다 하나를 선택하는 특별한 이유가 있지 않는 한, 당신이 가장 잘 이해하고 가장 편한 기술을 사용하십시오.스레딩은 그만큼 혼란스럽고 복잡한 상황에서 익숙하지 않은 인터페이스를 사용하면 혼란이 가중됩니다. –