1、异步函数+并发队列(会开多条线程,任务是并发执行的)
1、1创建并发队列
dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT);
1、2执行异步函数
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
2、异步函数+串行队列(会开一条线程,任务是按顺序执行的)
2、1创建串行队列
dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_SERIAL);
2、2执行异步函数
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
3、同步函数+并发队列(不会开线程,任务按顺序执行)
3、1创建并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
3、2执行同步任务
dispatch_sync(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
4、异步函数+并发队列(不会开线程,任务按顺序执行)
4-1创建并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
4-2执行异步任务
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
5、同步函数+主队列(不会开线线程,会死锁)
5-1获得主队列
dispatch_queue_t queue = dispatch_get_main_queue();
5-2执行同步函数
ispatch_sync(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
6、异步函数+主队列(不会开线程,任务按顺序执行)
6-1获得主队列
dispatch_queue_t queue = dispatch_get_main_queue();
6-2执行异步函数
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
7、同步函数+全局队列(不会开线程,任务是按顺序执行的)
7-1、获取全局队列
//获得全局并发队列,默认存在,特殊的并发队列
//第一个参数:队列的优先级 DISPATCH_QUEUE_PRIORITY_DEFAULT == 0
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
7-2、执行同步任务
dispatch_sync(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
8、异步函数+全局队列(会开线程,任务是并发执行的)
8-1、获得全局队列
//获得全局并发队列,默认存在,特殊的并发队列
//第一个参数:队列的优先级 DISPATCH_QUEUE_PRIORITY_DEFAULT == 0
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
8-2、执行异步函数
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
总结:会不会开线程是根据执行的是什么函数,如果是异步函数会开线程(主队列除外)如果是同步函数不会开线程