美文网首页
GCD简单实现

GCD简单实现

作者: 一个人在路上走下去 | 来源:发表于2018-08-06 21:20 被阅读97次

    GCD实现1,2并行和3串行和45串行,4,5是并行。即3依赖1,2的执行,45依赖3的执行。

    关系
    队列组的方式
    - (void) methodone{
    dispatch_group_t group = dispatch_group_create();
    
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"%d",1);
    });
    
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"%d",2);
    });
    
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"3");
        
        dispatch_group_t group1 = dispatch_group_create();
        
        dispatch_group_async(group1, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSLog(@"%d",4);
        });
        
        dispatch_group_async(group1, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSLog(@"%d",5);
        });
        
    });
    
    }
    

    串行队列:队列中的任务只会顺序执行

    dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial);
    

    并行队列: 队列中的任务通常会并发执行。

    dispatch_queue_t q = dispatch_queue_create("......", dispatch_queue_concurrent);
    

    全局队列:是系统开发的,直接拿过来用就可以;与并行队列类似,但调试时,无法确认操作所在队列 。

    dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);
    

    主队列:每一个应用开发程序对应唯一一个主队列,直接使用即可;在多线程开发中,使用主队列更新UI。

    dispatch_queue_t q = dispatch_get_main_queue();
    

    主队列是GCD自带的串行队列,会在主线程中执行。异步全局并发队列 开启新线程,并发执行。

    并行队列里开启同步任务是有执行顺序的,只有异步才没有顺序。

    串行队列开启异步任务,是有顺序的。

    串行队列开启异步任务后嵌套同步任务造成死锁。

    相关文章

      网友评论

          本文标题:GCD简单实现

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