多线程GCD的使用

一、同步/异步、串行/并行的区别

1.同步/异步

同步/异步是指线程与线程之间的关系。

2.串行/并行

串行、并行是指队列内部任务与任务之间的关系。

如果是串行队列,那么队列内部的任务是按顺序执行的。

如果是并行队列,那么队列内部的任务执行时无序的,没有先后顺序。

二、线程与队列

1.线程

//同步线程

dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)

//异步线程

dispatch_async(<#dispatch_queue_t queue#>,<#^(void)block#>)

2.队列

//创建一个串行队列

dispatch_queue_t queue=dispatch_queue_create("label",DISPATCH_QUEUE_SERIAL);

//创建一个并行队列

dispatch_queue_t queue=dispatch_queue_create("label",DISPATCH_QUEUE_CONCURRENT);

//获取全局队列,全局队列是并行的

dispatch_queue_t queue=dispatch_get_global_queue(0,0);

//获取主线程的队列,主线程队列是串行的

dispatch_queue_t queue=dispatch_get_main_queue();

三、几种常见的任务处理方式

1.异步串行队列

dispatch_queue_t queue=dispatch_queue_create("queue",DISPATCH_QUEUE_SERIAL); 

      for(int I=0;i<10;i++){

          dispatch_async(queue,^{

              NSLog(@"----------%d",i);

         });

     }

队列中所有任务在异步线程中按顺序执行,结果如下:

多线程GCD的使用_第1张图片

2.异步并行队列

dispatch_queue_t queue=dispatch_queue_create("queue",DISPATCH_QUEUE_CONCURRENT);

    for(int I=0;i<10;i++){

         dispatch_async(queue,^{

             NSLog(@"----------%d",i);

        });

    }

队列中所有任务在异步线程并行执行,无先后顺序,结果如下:

多线程GCD的使用_第2张图片

3.异步串行队列,并在任务完成后进行通知

dispatch_group_t group=dispatch_group_create();

dispatch_queue_t queue=dispatch_queue_create("queue",DISPATCH_QUEUE_SERIAL);

for(int i=0;i<10;i++){

      dispatch_group_async(group,queue,^{

            NSLog("-----------%d",i);

       });

}

dispatch_group_notify(group,queue,^{

NSLog("任务执行完毕!");

}

运行结果如下:

多线程GCD的使用_第3张图片
4.异步并行队列,并在任务完成后进行通知

dispatch_group_t group=dispatch_group_create();

dispatch_queue_t queue =dispatch_queue_create("queue",DISPATCH_QUEUE_CONCURRENT);

for(int i=0;i<10;i++){

dispatch_group_async(group,queue,^{

NSLog("--------%d",i);

});

}

dispatch_group_notify(group,queue,^{

NSLog("任务执行完毕!");

});

结果如下:

多线程GCD的使用_第4张图片


你可能感兴趣的:(多线程GCD的使用)