【问题标题】:How many dispatch_queue's should one make? Less is better or more is better?一个人应该做多少个 dispatch_queue?越少越好还是越多越好?
【发布时间】:2014-04-25 11:22:19
【问题描述】:

我有 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;
}

【问题讨论】:

    标签: grand-central-dispatch


    【解决方案1】:

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

    【讨论】:

    • 我预计主要关注的是底层结构的大小。看看opensource.apple.com,它看起来像在 64 位平台上,调度队列至少 152 字节的堆分配内存,如果你要制造数千个这样的内存,它会很快加起来。
    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多