我接管了一位客户端应用程序的所有权,该客户端应用程序是一位刚接触iOS开发的客户(之后离开了公司)
我试图处理/改进它的并发使用。它创建了一堆不同的GCD定时器,具有不同的延迟,并且时间很混乱。
我可能会将其转换为使用GCD串行队列,因为我需要按顺序运行任务(但不是在主线程上运行。)我想监控多深待处理的任务进入队列。 NSOperationQueues有一个用于查看待处理任务数量的工具,但我没有看到GCD串行队列的类似选项。有这样的设施吗?
我想我可以构建一个NSOperationQueue,并使每个操作都依赖于前面的操作,从而创建一个串行操作队列,但是很多工作只是为了诊断队列中的任务数量而已。任何一次。
答案 0 :(得分:9)
没有公共API来查询GCD队列中的任务数。您可以自己构建一些内容,也可以使用NSOperationQueue
。如果你想构建一些东西,你可以用dispatch_a/sync
来递增一个计数器,然后用递减计数器的每个操作将另一个块排入队列,如下所示:
int64_t numTasks = 0
void counted_dispatch_async(dispatch_queue_t queue, dispatch_block_t block)
{
OSAtomicIncrement64(&numTasks);
dispatch_async(queue, ^{
block();
OSAtomicDecrement64(&numTasks);
});
}
或者您可以使用NSOperationQueue。这就是我的所作所为。一位聪明人曾告诉我,"使用最高级别的抽象来完成工作。"