zoukankan      html  css  js  c++  java
  • GCD小结

    GCD是基于C语言的底层API,用Block定义任务用起来非常灵活便捷.

      GCD的基本思想是就将操作放在队列中去执行

      (1)操作使用Blocks定义
      (2)队列负责调度任务执行所在的线程以及具体的执行时间
      (3)队列的特点是先进先出(FIFO)的,新添加至对列的操作都会排在队尾
     
    关于多线程的一些概念:
     
     GCD一共有5种队列:main queue :主队列,在主队列中只有一个主线程,本质也是一个串行队列
                              high priority queue:高优先级队列
                              low priority queue :低优先级队列
                              background priority queue:后台队列
                              default priority queue :默认优先级队列,也叫做自定义队列,又分为:
                                                               1:串行队列(serial queue):会顺序执行队列的里面的任务,一次只执行一个任务.
                                                               2:并行队列(concurrent queue):会并发的执行队列里面的任务,执行顺序不确定.
    常用方法:
       dispatch_sync:同步操作(任务),会执行完block的任务才进行下一个任务.
       dispatch_async:异步操作(任务),会把block提交给队列就立即返回,不去关心block是否完成,由队列去安排调用里面添加的block.
    队列和任务的使用:
         (1):串行队列加入同步任务:不会产生新线程,队列会把任务加入主线程中执行,有顺序.
         (2):串行队列中加入异步任务:会产生一个子线程.队列会把任务加入到这个子线程中执行,有顺序.
         (3):并行队列中加入同步任务:不会产生新线程,队列会把任务加入主线程中执行,有顺序
         (4):并行队列中加入异步任务:根据需要产生多个子线程,任务没有顺序执行
         (5):主线程队列和GCD创建的队列是不同的。在GCD中创建的队列优先级没有主队列高,所以在GCD中的串行队列开启同步任务里面没有嵌套任务是不会阻塞主线程
     
    在主队列中加入同步任务:  会造成死锁,原因是主队列中只有一个线程就是主线程,而且该线程除非关闭程序,否则一直循环执行,同步任务在主队列中优先级较高,为了能够执行任务    就想抢占主线程资源来执行任务,而主线程却又默认优先处理其他操作,不肯放手.两个的优先级都很高,最终导致死锁,阻塞线程了.
     在主队列中加入异步任务:主队列会先降低异步任务的优先级,等空闲时会把该异步任务放入主线程中执行,所以不会造成堵塞,一般的UI更新都在主队列的异步任务中完成.
     
  • 相关阅读:
    Linux Shell编程(3)——运行shell脚本
    Linux Shell编程(2)——第一个shell程序
    Linux Shell编程(1)——shell编程简介
    做“程序员”,不做“码农”,有哪些好办法?
    玩转大数据,顺利渡过34岁裁退危机!
    Google IO 2017为我们带来了什么
    《经验之谈》想要做好SEO推广必知要事,峰任策划告诉您。
    5月17日云栖精选夜读:分布式大数据系统巧实现,全局数据调度管理不再难
    程序员转型发展:拆除这些墙,才会发现更蓝的天空
    敢问路在何方?程序员转行应该卖水果还是卖烧饼
  • 原文地址:https://www.cnblogs.com/congliang/p/3781129.html
Copyright © 2011-2022 走看看