GCD简单实现

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自带的串行队列,会在主线程中执行。异步全局并发队列 开启新线程,并发执行。

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容