美文网首页我爱编程
IOS学习之对GCD的认识

IOS学习之对GCD的认识

作者: 最强的小强 | 来源:发表于2018-05-28 10:54 被阅读0次

    Grand Central Dispatch,它是苹果为多核的并行运算提出的解决方案,所以会自动合理地利用更多的CPU内核,最重要的是它会自动管理线程的生命周期(创建线程、调度任务、销毁线程),所以我们只需要告诉他干什么就行。同时它使用的也是 c语言,不过由于使用了 Block,使用起来更加方便,而且灵活。

    任务和队列

    • 任务:即操作,就是一段代码,在 GCD 中就是一个 Block,所以添加任务十分方便。任务有两种执行方式: 同步执行 和 异步执行,他们之间的区别是 会不会阻塞当前线程,直到 Block 中的任务执行完毕!

    同步执行:它会阻塞当前线程并等待 Block 中的任务执行完毕,然后当前线程才会继续往下运行。

    异步执行:当前线程会直接往下执行,它不会阻塞当前线程。

    • 队列:用于存放任务。一共有两种队列, 串行队列 和 并行队列。
      GCD 会 FIFO(先进先出)原则执行任务:
    同步执行 异步执行
    串行队列 当前线程,一个一个执行 其他线程,一个一个执行
    并行队列 当前线程,一个一个执行 开很多线程, 一起执行

    创建任务

    • 同步任务:会阻塞当前线程 。
    dispatch_sync(<#queue#>, ^{
          //code here
          NSLog(@"%@", [NSThread currentThread]);
      });
    
    • 异步任务:不会阻塞当前线程 。
    dispatch_async(<#queue#>, ^{
          //code here
          NSLog(@"%@", [NSThread currentThread]);
      });
    

    创建队列

    • 主队列:这是一个特殊的 串行队列。它用于刷新 UI,任何需要刷新 UI 的工作都要在主队列执行,所以一般耗时的任务都要放到别的线程执行。
    // 主队列
    dispatch_queue_t queue= ispatch_get_main_queue();
    
    • 自己创建的队列:自己可以创建 串行队列, 也可以创建 并行队列。 其中,
      第一个参数是标识符,用于 DEBUG 的时候标识唯一的队列,可以为空。
      第二个参数用来表示创建的队列是串行的还是并行的,传入 DISPATCH_QUEUE_SERIALNULL 表示创建串行队列。传入 DISPATCH_QUEUE_CONCURRENT 表示创建并行队列。
      // 串行队列
      dispatch_queue_t queue1 = dispatch_queue_create("tk.bourne.testQueue", NULL);
      dispatch_queue_t queue2 = dispatch_queue_create("tk.bourne.testQueue",  DISPATCH_QUEUE_SERIAL);
      // 并行队列
      dispatch_queue_t queue = dispatch_queue_create("tk.bourne.testQueue", DISPATCH_QUEUE_CONCURRENT);
    
    • 全局并行队列:只要是并行任务一般都加入到这个队列。这是系统提供的一个并发队列。
    // 全局并行队列
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    

    相关文章

      网友评论

        本文标题:IOS学习之对GCD的认识

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