美文网首页
多线程GCD的使用

多线程GCD的使用

作者: maTianHong | 来源:发表于2017-07-14 17:14 被阅读13次

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

    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);

             });

         }

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

    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);

            });

        }

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

    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("任务执行完毕!");

    }

    运行结果如下:

    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的使用

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