使用Grand Central Dispatch(GCD)创建完全N个线程

问题描述 投票:2回答:4

我知道我可以与dispatch_asyncdispatch_get_global_queue异步执行任务。

但dispatch_async创建了多少个线程?我该怎么做才能用GCD执行完全N(不多也不少)的线程,并对它们执行一些任务?执行任务后,我需要在已发布的线程中添加新任务,可能在前一任务的complitation块中。

或者也许我可以用NSOperationQueue来控制threds的数量?我知道它有属性maxConcurrentOperationCount,但它只控制任务的最大限制。那么,我可以确定NSOperationQueue创建不少于8个线程,以防我设置maxConcurrentOperationCount = 8并向NSOperationQueue添加12个操作吗?

非常感谢你!

iphone ios multithreading asynchronous grand-central-dispatch
4个回答
5
投票

你应该看看NSThread。如果你需要精确控制你想要运行的线程数,那么这就是你要走的路。


4
投票

NSOperation子类用于你想要完成的任务并将它们放入NSOperationQueue。您可以设置队列上的并发操作数。

NSOperationQueue *q = [[NSOperationQueue alloc] init];
q. maxConcurrentOperationCount = N;

1
投票

队列概念与线程不同。通过NSThread课程。由于NSOperation使用GCD,因此无法从此处设置线程。您可以合并NSThread和NSOperation创建并传递不同的线程。 但你为什么要那样做?更多的线程并不意味着更多的速度,通常与内存,锁定,并发等很多关注相反。 你应该有一个非常具体的原因。


0
投票

如果要在使用gcd时控制线程的最大数量,可以使用DispatchSemaphore。首先,创建一个具有最大计数的semaphore,其次是在任务开始时,semaphore.wait(),最后在任务结束时,semaphore.signal()

© www.soinside.com 2019 - 2024. All rights reserved.