技术贴:2.初识GCD

作者: Xcode10 | 来源:发表于2016-06-29 22:20 被阅读46次

    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

        本文链接:https://www.haomeiwen.com/subject/ituxjttx.html