多线程编程之GCD(一)

作者: kevinLY | 来源:发表于2017-02-25 21:49 被阅读52次

什么是GCD (Grand Central Dispatch)

【摘自官方文档】GCD是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程的管理作为系统的一部分实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率。

从上段文字中可以知道:
1、GCD是异步执行任务的技术之一;
2、GCD自动生成线程;
3、关键是高效;

下面通过GCD的API感受下GCD的强大:

一、Dispatch Queue

【官方说明】开发者要做的只是定义想要执行的任务并追加到适当的Dispatch Queue中。

字面上理解即‘队列’,开发者只需要把想要执行的任务放到队列中,Dispatch Queue会按照FIFO(先进先出)的顺序执行处理;

创建一个Dispatch Queue的API

dispatch_queue_t
dispatch_queue_create(const char *_Nullable label,
                      dispatch_queue_attr_t _Nullable attr);

需要知道的是在执行处理中存在两种Dispatch Queue:1、串行队列;2、并行队列;在API中体现在第二个参数里,串行队列——DISPATCH_QUEUE_SERIAL,并行队列——DISPATCH_QUEUE_CONCURRENT

dispatch_queue_t serialQueue = dispatch_queue_create("com.qmf", 
DISPATCH_QUEUE_SERIAL);
dispatch_queue_t concurrentQueue = dispatch_queue_create("com.qmf", 
DISPATCH_QUEUE_CONCURRENT);

下面通过一段代码比较两者的区别:
S:

dispatch_async(serialQueue, ^{  NSLog(@"1")  });
dispatch_async(serialQueue, ^{  NSLog(@"2")  });
dispatch_async(serialQueue, ^{  NSLog(@"3")  });
dispatch_async(serialQueue, ^{  NSLog(@"4")  });

C:

dispatch_async(concurrentQueue, ^{  NSLog(@"1")  });
dispatch_async(concurrentQueue, ^{  NSLog(@"2")  });
dispatch_async(concurrentQueue, ^{  NSLog(@"3")  });
dispatch_async(concurrentQueue, ^{  NSLog(@"4")  });

------------------------------华丽的分割线----------------------------------------
先不要往下看自己预测下S和C分别输出结果会是什么?

serialQueue是一个串行队列,一次只生成一个线程,添加的所有任务都只能在这一个线程中执行;
concurrentQueue是一个并行队列,一次可以生成多个线程,添加的任务可以在多个线程中同时执行;

输出:
S:

1
2
3
4

C:(不唯一)

2
1
3
4
二、dispatch_queue_create

dispatch_queue_t
dispatch_queue_create(const char *_Nullable label,
dispatch_queue_attr_t _Nullable attr);

参数一:指定queue的名称 
参数二:指定queue的类型

>注意:在GCD的API中,名称中含有‘create’的,当不需要生成的对象时,需要使用dispatch_release()函数释放;






------------------------------未完待续--------------------------------------------

不懂就[药问](http://www.51question.com  "")

相关文章

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • GCD的使用

    GCD的详解iOS多线程--彻底学会多线程之『GCD』 GCD线程之间的通讯 一般在主线程里面刷新UI 点击、滚动...

  • iOS进阶之多线程管理(GCD、RunLoop、pthread、

    深入理解RunLoopiOS多线程--彻底学会多线程之『GCD』iOS多线程--彻底学会多线程之『pthread、...

  • iOS多线程之NSOperations

    相关文章:iOS多线程之NSThreadiOS多线程之GCD NSOperation(任务)与NSOperatio...

  • iOS多线程之GCD

    iOS多线程之GCD 什么是GCD GCD(grand central dispatch) 是 libdispat...

  • 多线程

    参考文章:iOS多线程--彻底学会多线程之『GCD』Swift 3.0 GCD和DispatchQueue 使用解...

  • FLAnimatedImageView加载卡顿问题。

    GCD 的调用 转载“iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用”

  • OC-多线程GCD

    参考:GCD源码深入理解 GCDiOS多线程--彻底学会多线程之『GCD』关于iOS多线程,我说,你听,没准你就懂...

网友评论

    本文标题:多线程编程之GCD(一)

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