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]);
});
總結:會不會開線程是根據執行的是什么函數,如果是異步函數會開線程(主隊列除外)如果是同步函數不會開線程