技术贴:2.初识GCD

GCD全程Grand Central Dispatch

摒弃掉了线程中复杂的创建线程和开启线程的繁琐。只需要关注最关键的两个步骤:任务和队列

同步方式执行任务:

dispatch_sync

异步的方式执行任务:

dispatch_async

区别:同步:只能在当前线程中执行任务,不具备开启新线程的能力

          异步:可以在新的线程中执行任务,具备开启新的线程的能力

队列:并发队列  :可以让多个任务同时进行(自动开启多个线程同时执行任务)

          并发功能只在异步(dispatch_async)函数下才有效

          串行队列 :让任务一个接着一个进行,一个任务完成才能执行下一个任务。

四种队列组合:

异步并发: dispatch_async +DISPATCH_QUEUE_CONCURRENT可以同时开启多条线程。

同步并发:dispatch_sync +DISPATCH_QUEUE_CONCURRENT 不会创建新的线程(并发并未体现出来,实现效果和同步串行一样,但是会更加消耗性能。)

异步串行:dispatch_async+DISPATCH_QUEUE_SERIAL 会开启新的线程,但是执行完一个任务才回执行下一个。

同步串行:dispatch_sync+DISPATCH_QUEUE_SERIAL 不会开启新的线程且任务按顺序执行完。


主队列: dispatch_get_main_queue + 异步 不管是不是并行还是串行,都会放至主线程中执行!

             dispatch_get_main_queue + 同步 会导致卡死。


GCD中保证代码在整个程序中至运行一次: dispatch_once(&onceToken,^ {

           // 只运行一次的代码

});

你可能感兴趣的:(技术贴:2.初识GCD)