iOS GCD多線程介紹

來源:互聯網
上載者:User

標籤:

GCD:是純C語言寫的,是蘋果公司為多核的並行運算提出的解決方案。

GCD的兩個核心概念: - 任務 - 隊列

將任務添加到隊列中 GCD會自動將隊列中的任務取出,放到對應的線程中執行 任務的取出遵循隊列的FIFO原則:先進先出,後進後出 - 建立串列隊列

// "WE" 為線程的名稱// DISPATCH_QUEUE_SERIAL 串列dispatch_queue_t queue = dispatch_queue_create("WE",DISPATCH_QUEUE_SERIAL);// 也可以這樣設定 串列預設為NULLdispatch_queue_t queue = dispatch_queue_create("WE", NULL)

-建立隊列

//DISPATCH_QUEUE_CONCURRENT 並行dispatch_queue_t queue = dispatch_queue_create("WE", DISPATCH_QUEUE_CONCURRENT);

- 非同步執行

dispatch_async(queue, ^{// });

- 同步執行

dispatch_sync(queue, ^{//});

GCD的幾種用法 - 串列隊列,同步執行-----不開線程,同步執行

dispatch_queue_t queue = dispatch_queue_create("WE",DISPATCH_QUEUE_SERIAL);    for (int i = 0; i < 5; ++i) {        // 同步執行        dispatch_sync(queue, ^{            NSLog(@"%d--%@",i,[NSThread currentThread]);        });    } 

- 串列隊列,非同步執行-----開一個線程,順序執行
dispatch_queue_t queue = dispatch_queue_create("WE",DISPATCH_QUEUE_SERIAL);    for (int i = 0; i < 5; ++i) {        // 非同步執行        dispatch_async(queue, ^{            NSLog(@"%d--%@",i,[NSThread currentThread]);        });}
- 並行隊列,非同步執行-----開多個線程,非同步執行
    dispatch_queue_t queue = dispatch_queue_create("WE", DISPATCH_QUEUE_CONCURRENT);        for (int i = 0; i < 10; ++i) {//        // 非同步執行        dispatch_async(queue, ^{            NSLog(@"非同步>%d--%@",i,[NSThread currentThread]);        });    } 

- 並行隊列,同步執行-----不開線程,順序執行

    dispatch_queue_t queue = dispatch_queue_create("WE", DISPATCH_QUEUE_CONCURRENT);    for (int i = 0; i < 10; ++i) {        // 同步執行        dispatch_sync(queue, ^{            NSLog(@"同步>%d--%@",i,[NSThread currentThread]);        });    } 

- 主隊列,非同步任務-----不開線程,同步執行

    dispatch_queue_t queue = dispatch_get_main_queue();    for (int i = 0; i < 5; ++i) {        //        // 非同步執行        dispatch_async(queue, ^{            NSLog(@"%d--%@",i,[NSThread currentThread]);        });    }

 

 

- 主隊列,同步執行-----程式執行不出來(死結) 死結的原因,當程式執行到下面這段代碼的時候

1) 主隊列:如果主線程正在執行代碼,就不調度任務

2) 同步執行:如果第一個任務沒有執行,就繼續等待第一個任務執行完成,再執行下一個任務,此時互相等待,程式無法往下執行(死結)

 

- 全域隊列(本質就是並發隊列)

//第一個參數:iOS7和iOS8中適配此參數 可以直接傳入0//第二個參數:為將來保留使用,始終傳入0dispatch_queue_t queue = dispatch_get_global_queue(0, 0);    for (int i = 0; i < 5; ++i) {        // 並存執行        dispatch_async(queue, ^{            NSLog(@"%d--%@",i,[NSThread currentThread]);        });}

 

 

 

 

iOS GCD多線程介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.