我知道我可以与dispatch_async
和dispatch_get_global_queue
异步执行任务。
但是dispatch_async创建了多少个线程? 我该怎么做才能用GCD执行完全N(不多也不少)的线程,并对它们执行一些任务?执行任务后,我需要在发布的线程中添加新任务,可能是在前一个任务的complitation块中。
或者我可以用NSOperationQueue
来控制threds的数量?
我知道它有属性maxConcurrentOperationCount
,但它只控制任务的最大限制。那么,我可以确定NSOperationQueue创建不少于8个线程,以防我设置maxConcurrentOperationCount = 8并向NSOperationQueue
添加12个操作吗?
非常感谢!
答案 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()
。