2014-04-25 65 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

相關問題