1、串行队列:按照指派的顺序来执行任务,前一个执行完下一个才能执行
dispatch_queue_t serialQueue = dispatch_queue_create("test",DISPATCH_QUEUE_SERIAL);
int i;
for (i=0; i<100; i++ ) {
dispatch_async(serialQueue, ^{
NSLog(@"任务1"); //任务一
});
dispatch_async(serialQueue, ^{
NSLog(@"任务2"); //任务二
});
dispatch_async(serialQueue, ^{
NSLog(@"任务3"); //任务三
});
}
运行结果:
2016-10-27 12:02:20.528 GCD_iOS[650:31492] 任务1
2016-10-27 12:02:20.532 GCD_iOS[650:31492] 任务2
2016-10-27 12:02:20.534 GCD_iOS[650:31492] 任务3
2016-10-27 12:02:20.534 GCD_iOS[650:31492] 任务1
2016-10-27 12:02:20.534 GCD_iOS[650:31492] 任务2
2016-10-27 12:02:20.535 GCD_iOS[650:31492] 任务3
2016-10-27 12:02:20.536 GCD_iOS[650:31492] 任务1
2016-10-27 12:02:20.536 GCD_iOS[650:31492] 任务2
2016-10-27 12:02:20.536 GCD_iOS[650:31492] 任务3
2016-10-27 12:02:20.537 GCD_iOS[650:31492] 任务1
2016-10-27 12:02:20.537 GCD_iOS[650:31492] 任务2
2016-10-27 12:02:20.537 GCD_iOS[650:31492] 任务3
2016-10-27 12:02:20.537 GCD_iOS[650:31492] 任务1
2016-10-27 12:02:20.538 GCD_iOS[650:31492] 任务2
2016-10-27 12:02:20.538 GCD_iOS[650:31492] 任务3
2、并行队列:能够同时执行一个或多个任务,执行任务的顺序并不一定
//并发队列测试
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
NSLog(@"current task");
int i;
for (i=0; i<100; i++ ) {
dispatch_async(globalQueue, ^{
NSLog(@"任务1"); //任务一
});
dispatch_async(globalQueue, ^{
NSLog(@"任务2"); //任务二
});
dispatch_async(globalQueue, ^{
NSLog(@"任务3"); //任务三
});
}
输出结果:
2016-10-27 12:12:48.243 GCD_iOS[814:38536] 任务2
2016-10-27 12:12:48.243 GCD_iOS[814:38535] 任务1
2016-10-27 12:12:48.243 GCD_iOS[814:38537] 任务3
2016-10-27 12:12:48.243 GCD_iOS[814:38538] 任务1
2016-10-27 12:12:48.243 GCD_iOS[814:38539] 任务2
2016-10-27 12:12:48.244 GCD_iOS[814:38539] 任务3
2016-10-27 12:12:48.244 GCD_iOS[814:38539] 任务1
2016-10-27 12:12:48.245 GCD_iOS[814:38539] 任务2
2016-10-27 12:12:48.245 GCD_iOS[814:38536] 任务3
同步:在当前线程中执行任务,不具备开启新线程的能力
异步:在新的线程中执行任务,具备开启新线程的能力