多线程编程之GCD(一)

什么是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  "")

你可能感兴趣的:(多线程编程之GCD(一))