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

时间:2013-02-06 11:23:14

标签: iphone ios multithreading asynchronous grand-central-dispatch

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

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

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

非常感谢!

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

您要执行的任务的子类NSOperation,并将它们放入NSOperationQueue。您可以设置队列上的并发操作数。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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