应该有多少dispatch_queue?越少越好或越多越好?

时间:2014-04-25 11:22:19

标签: grand-central-dispatch

我有一个类的10个实例,需要执行一些后台任务。这应该针对实例连续​​发生,但是可以是并发的,即实例可以彼此独立地工作。

哪个在速度和电池方面最具成本效益?我什么时候需要担心我创造了太多队列?

这一个(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;
}

1 个答案:

答案 0 :(得分:3)

你想要(B)。 (A)将创建一个队列,并将序列化跨所有实例的工作,而不仅仅是每个实例。队列非常轻量级。除非这是一个类,你将同时拥有数千个实例,我不会担心每个实例有一个队列的开销。