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自带的串行队列,会在主线程中执行。异步全局并发队列 开启新线程,并发执行。
并行队列里开启同步任务是有执行顺序的,只有异步才没有顺序。
串行队列开启异步任务,是有顺序的。
串行队列开启异步任务后嵌套同步任务造成死锁。