如何在同一全局队列中添加背景任务



我正在编码iOS上的工作线程或背景线程之类的内容。每次任务进来时,我都将其放入背景线程中。但是问题是,我不想每次都使用此dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{});,因为它会使任务在不同的线程中运行,并创建一个线程花费很多时间。

所以我的问题是如何制作GCD队列并将其运行在相同的背景线程中,我将在结果出来时将其运行到主线程。

您似乎正在使用"线程"one_answers"队列",就像它们是同一件事一样。他们不是。队列是可以使用1个或更多实际线程实现的较高级别的抽象。

使用dispatch_get_global_queue可能每次都会为您提供不同的队列。因此,您需要做的第一件事是创建一个您使用的单一队列,而不是每次都要求新的队列。使用dispatch_queue_create创建一个队列。在某些适当的范围内存储对此的引用,以便您可以在需要的任何地方引用它。

现在您只有一个队列,您需要确定队列是否应并发队列或串行队列。串行队列只能使用1个线程,而并发队列可以使用多个线程。您可以通过将适当的值传递给attr函数的CC_4参数来获得所需的队列。

Objective-C:

创建队列:

dispatch_queue_t myQueue = dispatch_queue_create(@"my_global_queue", DISPATCH_QUEUE_CONCURRENT); // or use DISPATCH_QUEUE_SERIAL

使用队列:

dispatch_async(myQueue, ^{
    // code
});

Swift:

创建队列:

let myQueue = DispatchQueue(label: "my_global_queue") // serial

或:

let myQueue = DispatchQueue(label: "my_global_queue", attributes: .concurrent) // concurrent

使用队列:

myQueue.async {
    // code
}

最新更新