//虽然Serial Dispatch Queue和Concurrent Dispatch Queue受到系统资源的限制,但用dispatch_queue_create函数可生成任意多个Dispatch Queue。
//在一个Serial Dispatch Queue中同时只能执行一个追加处理,多个Serial Dispatch Queue可并行执行
//过多使用Serial Dispatch Queue,会消耗大量内存,引起大量上下文切换,大幅度降低系统的响应性能,因此注意Serial Dispatch Queue的生成个数。
//Concurrent Dispatch Queue不管生成多少,由于XNU内核只使用有效管理的线程,因此不会发生Serial Dispatch Queue的问题。
//多个线程更新相同资源导致的数据竞问题,使用Serial Dispatch Queue。
//当并行执行不发生数据竞争等问题的处理时,使用Concurrent Dispatch Queue。
//通过dispatch_queue_create可生成Dispatch Queue,注意,生成的Dispatch Queue在使用结束后必须由程序员进行释放(现在GCD对象已经纳入了ARC的管理范围,在纳入之前是需要程序员按照内存管理的思考方式来手动管理GCD对象的)。
dispatch_queue_t serialDispatchQueue = dispatch_queue_create("Dispatch Queue的名称", NULL);
//参数1:Dispatch Queue的名称,可设NULL
//参数2:指定Dispatch Queue的类型。若为NULL,则为Serial Dispatch Queue;若为DISPATCH_QUEUE_CONCURRENT,则为Concurrent Dispatch Queue
//返回值:表示Dispatch Queue的diapatch_queue_t类型
//通过dispatch_release函数释放
//dispatch_release(serialDispatchQueue);
//通过dispatch_retain函数持有
//dispatch_retain(serialDispatchQueue);
//通过dispatch_async函数将block中定义的处理“追加”到赋值在serialDispatchQueue的“Dispatch Queue”中
dispatch_async(serialDispatchQueue, ^{
NSLog(@"//被追加的定义处理的block");
});
//注意,在dispatch_async函数中追加Block到Dispatch Queue,该Block通过dispatch_retain函数持有Dispatch Queue。无论Dispatch Queue是Serial Dispatch Queue还是Concurrent Dispatch Queue都一样。一旦Block执行结束,就通过dispatch_release函数释放该Block持有的Dispatch Queue。