zoukankan      html  css  js  c++  java
  • 关于多线程中GCD的使用

    GCD 分为异步和同步

    异步:
    ```objc
     dispatch_async (  参数1  , {
         }
    同步:
    dispatch_sync( 参数1   , {
     
    }
    ```
    ###参数1 :队列
     
    队列分为两种:  **dispatch_get_globle_queue(0,0) **全局队列**dispatch_get_main_queue()**主队列
     
    全局队列  : 系统为程序员提供的队列 
    执行时机 : 在系统主线程空闲时才会执行
    主队列: 系统在执行主线程时执行
    执行时机 :一般从分线程跳转到主线程需要使用 主队列
     
    全局队列和异步配合使用
    主队列和同步配合使用
     
    补充:其中队列还包含自己创建的 **dispatch_queue_creat **( 参数1  , 参数2   )出来的
    其中
    参数1是 队列的名字标识 
    参数2 有两个选择 
    ```objc
     a.   DISPATCH_QUEUE_SERIAL  //是该队列是一个串行队列 即有序执行 
    b.  DISPATCH_QUEUE_CONCURRENT  //该队列是一个并发队列,在执行第一个的同时会不等前一个队列执行完,就会在其他线程中执行后一个队列或者其中的其他队列 (无次序之分)
    ```objc
    #面试题
    ```objc

    - (void)viewDidLoad {

    //dispatch_sync(dispatch_get_main_queue(), ^{
    //NSLog(@3);
    //死锁原因
    //1:dispatch_sync在等待block语句执行完成,而block语句需要在主线程里执行,所以dispatch_sync如果在主线程调用就会造成死锁
    //2:dispatch_sync是同步的,本身就会阻塞当前线程,也即主线程。而又往主线程里塞进去一个block,所以就会发生死锁。
    //});
    //dispatch_async(dispatch_get_global_queue(), ^{
    //async 在主线程中 创建了一个异步线程 加入 全局并发队列,async 不会等待block 执行完成,立即返回

    NSLog(@2);//不会造成死锁;

    });

    }

    ```

    **分析这段代码:view DidLoad 在主线程中,也即dispatch_get_main_queue()中,执行到sync时向dispatch_get_main_queue()插入同步thread,sync会等到后面的block执行完成才返回。sync又在主队列里面,是个串行队列,sync是后面才加入的,前面一个是主线程,所以sync想执行block必须等待前一个主线程执行完成,而主线程却在等待sync返回,去执行后续工作,从而造成死锁。**

    ###2:

    ```objc

    dispatch_sync 和 dispatch_async 区别:

    dispatch_async(queue,block) async 异步队列,dispatch_async 函数会立即返回, block会在后台异步执行。
    dispatch_sync(queue,block) sync 同步队列,dispatch_sync 函数不会立即返回,即阻塞当前线程,等待 block同步执行完成。

    ```

    3:

     ```objc

    GCD Queue 分为三种:

    1,The main queue :主队列,主线程就是在个队列中。

    2,Global queues : 全局并发队列。

    3,用户队列:是用函数 dispatch_queue_create 创建的自定义队列

    ```

    追寻最真
  • 相关阅读:
    June 26th 2017 Week 26th Monday
    June 25th 2017 Week 26th Sunday
    June 24th 2017 Week 25th Saturday
    June 23rd 2017 Week 25th Friday
    June 22nd 2017 Week 25th Thursday
    2018最佳网页设计:就是要你灵感爆棚!!!
    图片素材类Web原型制作分享-Pexels
    想要打动HR的心,UX设计师求职信究竟应该怎么写?
    【UXPA大赛企业专访】Mockplus:“设计替代开发”将成为现实
    2018年最好的医疗网站设计及配色赏析
  • 原文地址:https://www.cnblogs.com/zhao-jie-li/p/5128467.html
Copyright © 2011-2022 走看看