GCD入门基础知识

正式学习GCD之前,先要熟悉下列的术语:

串行与并发

1、任务串行执行就是每次只有一个任务被执行
2、并发即在同一时间内可以有多个任务被执行

同步与异步

1、一个同步函数只在完成了它预定的任务后才返回
2、一个异步函数,刚好相反,会立即返回,预定的任务会完成但不会等它完成。因此,一个异步函数不会阻塞当前线程去执行下一个函数

并发与并行

两个既相似又有区别的概念,并行要求并发,但是并发并不能保证并行。
1、并行是指两个或多个事件在同一时刻发生
2、并发是指两个或多个事件在同一时间间隔内发生。

串行队列与并发队列

1、串行队列中的任务一次执行一个,每个任务只在前一个任务完成时才开始
2、并发队列中的任务能得到的保证是它们会按照被添加的顺序开始执行,但这就是全部的保证了。任务可能以任意顺序完成,你不会知道何时开始运行下一个任务,或者任意时刻有多少 Block 在运行,而这完全取决于 GCD 。

GCD队列类型

包括主队列、全局调度队列、自己创建的串行队列或者并发队列。

  • 主队列是系统自动创建的与主线程关联的串行队列,通过dispatch_get_main_queue来获取。而主线程是唯一可以用于更新UI的线程,即是说必须在主线程访问UIKit的类。
  • 全局队列通过 dispatch_get_global_queue来获取,可以设置优先级。目前的全局队列有4个不同的优先级:background、low、default 以及 high。即
    #defineDISPATCH_QUEUE_PRIORITY_HIGH 2
    #define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
    #define DISPATCH_QUEUE_PRIORITY_LOW (-2)
    #define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
  • 串行队列或者并发队列是通过dispatch_queue_create函数来创建的。此函数有2个参数。参数1是一个C语言的字符串,是队列的标签,也就是名称,通常是采用com..这样的格式。参数二是指定串行队列还是并发队列。传DISPATCH_QUEUE_SERIAL进去,则是串行队列,传DISPATCH_QUEUE_CONCURRENT则为并发队列。

参考:
http://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1
(计算机操作系统)

你可能感兴趣的:(GCD入门基础知识)