1.简介
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并行任务。在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用。
GCD是一个替代诸如NSThread等技术的很高效和强大的技术。GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题。GCD的工作原理是让一个程序,根据可用的处理资源,安排他们在任何可用的处理器核心上平行排队执行特定的任务。这个任务可以是一个功能或者一个程序段。
GCD仍然在一个很低的水平使用线程,但是它不需要程序员关注太多的细节。GCD创建的队列是轻量级的,苹果声明一个GCD的工作单元需要由15个指令组成。也就是说创造一个传统的线程很容易的就会需要几百条指令。
GCD中的一个任务可被用于创造一个被放置于队列的工作项目或者事件源。如果一个任务被分配到一个事件源,那么一个由功能或者程序块组成的工作单元会被放置于一个适当的队列中。苹果公司认为GCD相比于普通的一个接一个的执行任务的方式更为有效率。
2.使用说明
- Dispatch Queue
执行处理有两种Dispatch Queue:Serial Dispatch Queue(顺序执行)和Concurrent Dispatch Queue。(并行执行)
—系统的dispath queue
(1).dispatch_get_main_queue()(ui线程) (2).dispath_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0)(系统全局队列)
Global Diapacth Queue有4个优先级:High Priority(高)、Default Priority(默认)、Low Priority(低)、Background Priority(后台)。dispatch queue可以通过dispatch_set_target_queue来设置优先级
-Dispatch Queue的延迟执行:dispatch_after()
// 2秒后将指定的Block增加到指定的Dispatch Queue中 double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ NSLog(@"Waitted at least 2 seconds"); }
- 多个Dispatch Queue执行结束后的执行操作: Dispatch Group
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, queue, ^{ NSLog(@"Queue One"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Queue Two"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Queue Three"); }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ NSLog(@"Queues Done"); });- 关于读写的数据同步操作,为处理数据而作:dispatch_barrier_async()
-可控制dispatch_async Block块执行次数的Block API: dispatch_apply()
-线程队列的挂起与执行:
// 挂起队列 dispatch_suspend(queue); // 恢复队列执行 dispatch_resume(queue);- 更细粒度的排他控制:dispatch_semaphore
-dispatch_once: 只执行一次指定处理的API
-Dispatch I/O:并发读取文件数据,高效率读取文件
以上常用函数可以根据具体的使用场景选择使用,具体函数参数可以参照函数api查看