将许多任务分派到一个队列,或者每个队列分配一个任务

时间:2012-07-28 07:10:30

标签: objective-c cocoa-touch grand-central-dispatch

我想一次启动多个线程,所以我使用了以下代码。

我很困惑我是否应该创建一个队列并在其中放入许多操作,或者通过一次操作创建多个队列。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
    for(int INDEX = 0; INDEX < 5; INDEX++) {
        dispatch_async(queue, ^{
            /*some code*/        
        }); 
    }

for(int INDEX = 0; INDEX < 5; INDEX++) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
            /*some code*/        
        }); 
    }

哪个是最佳的?另外,GCD中的线程数是否有限制?

1 个答案:

答案 0 :(得分:5)

你没有多个队列。你是retrieving one of the global queues。你的应用程序中有三个,你既不能创建也不能销毁它们。

此外,即使您正在创建队列(使用dispatch_queue_create()),也不一定要为每个队列或任何新线程创建新线程。 Grand Central Dispatch系统为您管理所有线程。 GCD不限制您可以创建的队列数。

请仔细阅读GCD referenceConcurrency Programming Guide