码迷,mamicode.com
首页 > 移动开发 > 详细

苹果多线程网络编程之-GCD队列与任务的理解

时间:2016-05-07 08:47:32      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

    今天就 iOS 的多线程 GCD 的使用做了一些总结和理解。

    GCD,Grand Central Dispatch,是Apple开发的一个多核编程的解决方法。

   GCD其实就是创建/获取一个队列,在 Block 块或方法(函数)里写需要执行的任务代码块,然后将任务放到合适的队列里执行。GCD队列呢,分三种:主队列(串行队列)、全局队列(并行队列)、自定义队列(自定义)。任务执行方法呢,又分为同步执行和异步执行。至于串行队列、并行队列,同步执行、异步执行的特点,自行去学习,这里不做过多阐述。大概意思就是

//同步:在当前线程中执行,不会开新的线程

//异步:会开新的线程,任务在新的线程中执行

//串行:顺序,一个一个的执行(一个执行完才执行下一个)

//并行:多个任务同时执行(可以将队列中的任务全部取出来,只要有线程就可以被执行)

  下面介绍三种队列的获取和创建方法。

  

//1.主队列
    /*
     主队列:串行队列,通过dispatch_get_main_queue();获取主队列。
     串行队列异步执行:先执行完 task1,再执行 task2
    */
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    dispatch_async(mainQueue, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task1");
        }
    
    });
    
    dispatch_async(mainQueue, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task2");
        }
    });
 //2.全局队列:
    /*
     全局队列:并行队列。用dispatch_get_global_queue(0, 0);获取。
     参数1:标识,随意设,一般写0。
     参数2:4种全局队列,有优先级区分。一般也写0
     DISPATCH_QUEUE_PRIORITY_HIGH > DISPATCH_QUEUE_PRIORITY_DEFAULT > DISPATCH_QUEUE_PRIORITY_LOW > DISPATCH_QUEUE_PRIORITY_BACKGROUND
     并行队列,异步执行:task1和task2交叉执行,1-2-1-2...
    */
    dispatch_queue_t globalQueen = dispatch_get_global_queue(0, 0);
    dispatch_async(globalQueen, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task1");
        }
        
    });
    
    dispatch_async(globalQueen, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task2");
        }
    });

 //3.自定义队列
    /*
     自定义队列,需要dispatch_queue_create("www.com", DISPATCH_QUEUE_CONCURRENT);来创建
     参数1:标识,随意设置字符串。注意:GCD 是 C 语言的封装,所以要用""而非@“”
     参数2:设置并行队列还是串行队列。
         DISPATCH_QUEUE_CONCURRENT//并行队列异步执行:task1和 task2随机执行
         DISPATCH_QUEUE_SERIAL//串行队列异步执行:先执行完task1,再执行 task2
    */
    dispatch_queue_t queue1 = dispatch_queue_create("www.com", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue1, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task1");
        }
    });
    dispatch_async(queue1, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task2");
        }
    });


苹果多线程网络编程之-GCD队列与任务的理解

标签:

原文地址:http://blog.csdn.net/zhonglv_honeymoon/article/details/51331743

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!