【原】iOS多線程之異步任務+並行隊列情況與異步任務+串行隊列(主隊列)情況


異步任務+並行隊列

把異步任務放到並行隊列進行執行,異步任務會在不同的線程中執行。

    /*異步執行+並行隊列*/
    - (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]);
    });
}

運行結果如下。可以看到,所有任務都在一個線程中執行,並且完成一個后,再執行下一個。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM