美文网首页我爱编程
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的认识

    Grand Central Dispatch,它是苹果为多核的并行运算提出的解决方案,所以会自动合理地利用更多的C...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

  • iOS开发之GCD串行队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 实例d...

  • iOS 开发之 GCD 不同场景使用

    iOS 开发之 GCD 不同场景使用 本文在iOS 开发值 GCD 基础 的基础上,继续总结了 GCD 的一些AP...

  • iOS Objective-C GCD之queue(队列)篇

    iOS Objective-C GCD之queue(队列)篇 GCD全称Grand Central Dispatc...

  • iOS学习之GCD

    执行结果:

  • iOS 开发之 GCD 基础

    iOS 开发之 GCD 基础 本文主要为 GCD 的 队列和执行方法等基础总结,目录如下: [TOC] GCD是什...

  • GCD

    iOS多线程 Swift4 GCD深入解析swift GCD 的一些高级用法GCD 之线程组(Dispatch G...

网友评论

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

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