多线程--GCD

来源:互联网 发布:微软鼠标与mac匹配 编辑:程序博客网 时间:2024/05/22 01:26

GCD的基本思想:将操作放在队列中去执行

1.操作使用的Blocks定义

2.队列负责调度任务执行所在的线程以及具体的执行时间

3.队列的特点就是先进先出(FIFO)的,新添加至队列的操作都会在队尾。

基本格式:

GCD的函数都是以dispatch(分派,调度)开头的

队列:(队列不是线程,也不表示对应的cpu,队列就是负责调度的,谁空闲,就把任务给谁)

dispatch_queue_t :

串行队列,队列中的任务会顺序执行(简单的理解:体育课上排队跑步,一个接着一个,保持队形)

下面示例为串行队列,的异步操作。在实际开发中非常有用,也安全。

dispatch_queue_t  q = dispatch_queue_create(参数1,参数2);//非ARC开发时,注意需要release。

参数1:是一个字符串类型,可以根据你所定义的字符串来跟踪到当前队列。

参数2:队列的属性:1.DISPATCH_QUEUE_SERIAL串行队列;  2.DISPATCH_QUEUE_CONCURRENT并行队列


dispatch_queue_t  q = dispatch_queue_create(“GCDdemo1”,DISPATCH_QUEUE_SERIAL);

dispatch_async(q,^{

   NSLog(@"%@",[NSThread currentThread]);

});

全局队列(不需要创建,直接get)

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEAFAULT,0);


主线程队列(每一个应用程序只有一个主线程,iOS开发中,所有UI的更新工作,都必须在主线程上执行)

dispatch_queue_t q = dispatch_get_main_queue();


并行队列,队列中的任务通常会并发执行(没有队形,执行顺序程序员不可控)

dispatch_queue_t  q = dispatch_queue_create(GCDdemo2,DISPATCH_QUEUE_CONCURRENT);

dispatch_async(q,^{

   NSLog(@"%@",[NSThread currentThread]);

});


操作:

dispatch_async异步操作,会并发执行,无法确定任务的执行顺序

dispatch_sync同步操作,会依次顺序执行,能够决定任务的执行顺序

0 0