異步任務+並行隊列
把異步任務放到並行隊列進行執行,異步任務會在不同的線程中執行。
/*異步執行+並行隊列*/ - (IBAction)clickBasic1:(UIButton *)sender { //全局並行隊列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //異步執行 dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task1:%d",i); } NSLog(@"task1----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task2:%d",i); } NSLog(@"task2----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task3:%d",i); } NSLog(@"task3----%@",[NSThread currentThread]); }); }
運行結果如下。異步任務+並行隊列組合情況下,每個任務會在不同的線程中同時執行。
異步任務+串行隊列(主隊列)
對於異步任務放在串行隊列中執行時,任務只會在一個新開的線程中,按照順序進行執行。
/*異步串行隊列*/ - (IBAction)clickBasic3:(id)sender { //創建串行隊列 dispatch_queue_t queue = dispatch_queue_create("com.hcios", NULL); //異步執行 dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task1:%d",i); } NSLog(@"task1----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task2:%d",i); } NSLog(@"task2----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task3:%d",i); } NSLog(@"task3----%@",[NSThread currentThread]); }); }
運行結果如下。可以看到,所有任務都在一個線程中執行,並且完成一個后,再執行下一個。