iOS oc 線程 進程,同步異步,併發串行,來捋捋

 

(一)大概念併發

gcd:使用起來就倆概念異步

  1.任務(你想作的事)async

  2.隊列(存聽任務)函數

gcd能夠根據你的須要,將你的任務進行排序,來肯定何時執行。spa

(二)小概念(同步異步,併發串行都是啥)線程

同步:在當前線程中執行code

異步:在另外一條線程中執行排序

 

併發:多個任務併發執行隊列

串行:一個任務執行完畢,再執行下個任務get

 

(三)上代碼

1.任務執行方式

(1)用同步的方式執行任務(在當前線程執行當前任務)

dispatch_sync(dispatch_queue_t  _Nonnull queue, ^(void)block)   //1.隊列名稱   2.要執行的block(在裏面寫你要執行的任務)

(2)用異步的方式執行任務(開闢新線程執行當前任務)

dispatch_async(dispatch_queue_t  _Nonnull queue, ^(void)block)//1.隊列名稱   2.要執行的block(在裏面寫你要執行的任務)

 

2.隊列的類型

(1)併發隊列

  GCD默認已經提供了全局的併發隊列,供整個應用使用,不須要手動建立

  使用dispatch_get_global_queue函數得到全局的併發隊列 

dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority,unsigned long flags); // 此參數暫時無用,用0便可

          第一個參數是優先級 ,第二個參數是之後用的,用0就好了

說明:全局併發隊列的優先級

#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高

#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默認(中)

#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低

#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 後臺

(2)串行隊列

 1.使用dispatch_queue_create函數建立串行隊列

    dispatch_queue_t  dispatch_queue_create(const char *label,  dispatch_queue_attr_t attr); // 隊列名稱, 隊列屬性,通常用NULL便可

示例:

dispatch_queue_t queue = dispatch_queue_create("wendingding", NULL); // 建立

dispatch_release(queue); // 非ARC須要釋放手動建立的隊列

2. 使用主隊列

  主隊列是GCD自帶的一種特殊的串行隊列,放在主隊列中的任務,都會放到主線程中執行

  使用dispatch_get_main_queue()得到主隊列

    我以爲這張圖總結的挺好的,只有在使用併發隊列而且異步執行任務的狀況下,所建立的任務纔會併發執行

代碼我也不寫了,比較懶,有啥不懂的 直接問

相關文章
相關標籤/搜索