多線程--GCD

GCD的基本思想:將操作放在隊列中去執行

1.操作使用的Blocks定義

2.隊列負責調度任務執行所在的線程以及具體的執行時間

3.隊列的特點就是先進先出(FIFO)的,新添加至隊列的操作都會在隊尾。

基本格式:

GCD的函數都是以dispatch(分派,調度)開頭的

隊列:(隊列不是線程,也不表示對應的cpu,隊列就是負責調度的,誰空閒,就把任務給誰)

dispatch_queue_t :

串行隊列,隊列中的任務會順序執行(簡單的理解:體育課上排隊跑步,一個接着一個,保持隊形)

下面示例爲串行隊列,的異步操作。在實際開發中非常有用,也安全。

dispatch_queue_t  q = dispatch_queue_create(參數1,參數2);//非ARC開發時,注意需要release。

參數1:是一個字符串類型,可以根據你所定義的字符串來跟蹤到當前隊列。

參數2:隊列的屬性:1.DISPATCH_QUEUE_SERIAL串行隊列;  2.DISPATCH_QUEUE_CONCURRENT並行隊列


dispatch_queue_t  q = dispatch_queue_create(“GCDdemo1”,DISPATCH_QUEUE_SERIAL);

dispatch_async(q,^{

   NSLog(@"%@",[NSThread currentThread]);

});

全局隊列(不需要創建,直接get)

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEAFAULT,0);


主線程隊列(每一個應用程序只有一個主線程,iOS開發中,所有UI的更新工作,都必須在主線程上執行)

dispatch_queue_t q = dispatch_get_main_queue();


並行隊列,隊列中的任務通常會併發執行(沒有隊形,執行順序程序員不可控)

dispatch_queue_t  q = dispatch_queue_create(GCDdemo2,DISPATCH_QUEUE_CONCURRENT);

dispatch_async(q,^{

   NSLog(@"%@",[NSThread currentThread]);

});


操作:

dispatch_async異步操作,會併發執行,無法確定任務的執行順序

dispatch_sync同步操作,會依次順序執行,能夠決定任務的執行順序

發佈了37 篇原創文章 · 獲贊 8 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章