一般只要使用同步執行,串行隊列對於添加的同步任務會立即執行
GCD中函數都是以dispatch開頭
GCD中,創建隊列的時候決定串行併發,執行的時候決定同步異步。
同步異步決定是否開新線程,串行併發決定開幾個線程。
隊列的選擇:
串行隊列異步執行:開一條線程,順序執行。
效率:不高,執行慢,資源佔用小-》省電。
一般是3G網絡下,對性能要求不高時用
併發隊列異步執行:開啓多條線程,併發執行。
效率:高,執行快,資源消耗大-》費電
網速快,或者需要快速響應且對任務執行順序沒有要求
同步任務:一般只會在併發隊列中需要阻塞後續任務時。因爲必須等待同步任務執行完畢再去執行其他任務。
dispatch調度;queue隊列;sync同步;async異步;concurrent併發;serial串行。
串行隊列:按順序一個一個執行。
併發隊列:同時執行多個任務,創建多個線程。
同步執行:不開新線程,在當前線程執行。
異步執行:開新線程,(把任務放到主線程上時不會開)
//創建一個串行隊列:
//參數:1、隊列標籤2、隊列屬性。例:(”biaoqian”, DISPATCH_QUEUE_SERIAL);
dispatch_queue_t queue = dispatch_queue_create(const char *label, dispatch_queue_attr_t attr)
//創建一個併發隊列:
//參數:1、隊列標籤2、隊列屬性。例:(”biaoqian”, DISPATCH_QUEUE_CONCURRENT);
dispatch_queue_t queue = dispatch_queue_create(const char *label, dispatch_queue_attr_t attr)
//用同步的方式執行任務:
//參數:1、隊列.2、block任務
dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
實例代碼:
dispatch_sync(quene, ^{
NSLog(@"%@", [NSThread currentThread]);//獲取線程
});
//用異步的方式執行任務:
//參數:1、隊列.2、block任務
dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
實例代碼:
dispatch_async(quene, ^{
NSLaog(@"%@", [NSThread currentThread]);
});