1垢揩、異步函數(shù)+并發(fā)隊列(會開多條線程衬横,任務(wù)是并發(fā)執(zhí)行的)
?1、1創(chuàng)建并發(fā)隊列
dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT);
1拯坟、2執(zhí)行異步函數(shù)
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
2晤碘、異步函數(shù)+串行隊列(會開一條線程,任務(wù)是按順序執(zhí)行的)
2友题、1創(chuàng)建串行隊列
dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_SERIAL);
2嗤堰、2執(zhí)行異步函數(shù)
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
3、同步函數(shù)+并發(fā)隊列(不會開線程咆爽,任務(wù)按順序執(zhí)行)
3梁棠、1創(chuàng)建并發(fā)隊列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
3、2執(zhí)行同步任務(wù)
dispatch_sync(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
4斗埂、異步函數(shù)+并發(fā)隊列(不會開線程符糊,任務(wù)按順序執(zhí)行)
4-1創(chuàng)建并發(fā)隊列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
4-2執(zhí)行異步任務(wù)
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
5、同步函數(shù)+主隊列(不會開線線程呛凶,會死鎖)
5-1獲得主隊列
dispatch_queue_t queue =? dispatch_get_main_queue();
5-2執(zhí)行同步函數(shù)
ispatch_sync(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
6男娄、異步函數(shù)+主隊列(不會開線程,任務(wù)按順序執(zhí)行)
6-1獲得主隊列
dispatch_queue_t queue =? dispatch_get_main_queue();
6-2執(zhí)行異步函數(shù)
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
7、同步函數(shù)+全局隊列(不會開線程模闲,任務(wù)是按順序執(zhí)行的)
7-1建瘫、獲取全局隊列
//獲得全局并發(fā)隊列,默認(rèn)存在,特殊的并發(fā)隊列
//第一個參數(shù):隊列的優(yōu)先級 DISPATCH_QUEUE_PRIORITY_DEFAULT == 0
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
7-2、執(zhí)行同步任務(wù)
dispatch_sync(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
8尸折、異步函數(shù)+全局隊列(會開線程啰脚,任務(wù)是并發(fā)執(zhí)行的)
8-1、獲得全局隊列
//獲得全局并發(fā)隊列,默認(rèn)存在,特殊的并發(fā)隊列
//第一個參數(shù):隊列的優(yōu)先級 DISPATCH_QUEUE_PRIORITY_DEFAULT == 0
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
8-2实夹、執(zhí)行異步函數(shù)
dispatch_async(queue, ^{
NSLog(@"download 1---%@",[NSThread currentThread]);
});
總結(jié):會不會開線程是根據(jù)執(zhí)行的是什么函數(shù)橄浓,如果是異步函數(shù)會開線程(主隊列除外)如果是同步函數(shù)不會開線程