2

我知道我可以使用dispatch_async和异步执行任务dispatch_get_global_queue

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

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

非常感谢你!

4

4 回答 4

5

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

于 2013-02-06T11:35:27.577 回答
4

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

NSOperationQueue *q = [[NSOperationQueue alloc] init];
q. maxConcurrentOperationCount = N;
于 2013-02-06T11:38:57.437 回答
1

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

于 2013-02-06T11:44:31.380 回答
0

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

于 2017-12-28T05:17:41.463 回答