2014-04-25 3 views
1

몇 가지 백그라운드 작업을 수행해야하는 클래스의 인스턴스가 10 개 있습니다. 이것은 인스턴스에 대해 순차적으로 발생해야하지만 인스턴스가 서로 독립적으로 작업을 수행 할 수 있다는 측면에서 동시에 발생할 수 있습니다.얼마나 많은 dispatch_queue를 만들어야합니까? 덜 좋아 지거나 더 나아집니다.

속도와 배터리면에서 가장 경제적 인 것은 어느 것입니까? 내가 대기열을 너무 많이 만들었다 고 걱정할 필요가 언제 있습니까?

이 하나 (A)?

- (dispatch_queue_t)queue 
{ 
    static dispatch_queue_t queue; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     queue = dispatch_queue_create("no.agens.someclass.somequeue", DISPATCH_QUEUE_SERIAL); 
    }); 
    return queue; 
} 

또는이 하나 (B)?

// assume read-only property of 'queue' is defined 

- (dispatch_queue_t)queue 
{ 
    if(_queue == nil) 
    { 
     _queue = dispatch_queue_create("no.agens.someclass.somequeue", DISPATCH_QUEUE_SERIAL); 
    } 
    return _queue; 
} 

답변

3

원하는 경우 (B). (A)는 하나의 대기열을 만들고 인스턴스 당 인스턴스가 아닌 모든 인스턴스에서 작업을 직렬화합니다. 대기열은 꽤 가볍습니다. 이것이 한 번에 수천 개의 인스턴스를 가지게 될 클래스가 아니라면, 인스턴스 당 큐를 갖는 오버 헤드에 대해 걱정할 필요가 없습니다.

+0

언제 너무 많습니까? – hfossli

+1

기본 구조가 기본 관심사가 될 것으로 기대합니다. 'opensource.apple.com'을 보면, 디스패치 큐는 64 비트 플랫폼처럼 적어도 152 바이트의 힙 할당 메모리를 가지고 있습니다.이 메모리는 수천 개를 만들면 더할 수 있습니다. – ipmcc

관련 문제