07-主佇列和全域性佇列
GCD 會主動的提供一個佇列供開發者使用。
主佇列 系統提供的序列佇列
是在主執行緒執行的佇列,所以是序列的佇列。任務一個個執行。
dispatch_get_main_queue()
全域性佇列 系統提供的併發佇列
全域性佇列是所有應用程式都能夠使用的併發佇列,不需要手動的建立併發佇列了。
dispatch_get_global_queue
分為四個優先順序
名稱 | 執行方式 | 備註 |
---|---|---|
dispatch_get_main_queue | 序列 | 主執行緒執行 |
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); | 併發 | 優先順序高 |
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); | 併發 | 預設 |
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); | 併發 | 低 |
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); | 併發 | 後臺執行 |
dispatch_queue_create
dispatch_queue_create 建立生成的佇列不管是序列的還是並行的,優先順序和全域性佇列形同的預設的優先順序
// 建立一個序列佇列
dispatch_queue_t queue1 = dispatch_queue_create("sk1", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t queue2 = dispatch_queue_create("sk2", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t queue3 = dispatch_queue_create("sk3", DISPATCH_QUEUE_SERIAL);
// 列印1 2 3 為一個統一的任務。一個任務被拆分成多個任務放到多個序列佇列中去,但是執行順序還是要保持和
// 在一個序列佇列中的一致效果。列印順序為 1 2 3
dispatch_async(queue1, ^{
NSLog(@"Hello from queue1");
});
dispatch_async(queue2, ^{
NSLog(@"Hello from queue2");
});
dispatch_async(queue3, ^{
NSLog(@"Hello from queue3");
});
// 列印順序 因為不同的佇列,任務都是併發執行,所以列印順序是不一定的
2018-12-13 10:49:22.267722+0800 SK_Thread_Demo[4976:69000] Hello from queue3
2018-12-13 10:49:22.267722+0800 SK_Thread_Demo[4976:69002] Hello from queue1
2018-12-13 10:49:22.267722+0800 SK_Thread_Demo[4976:69001] Hello from queue2
dispatch_set_target_queue 使用佇列優先順序,讓佇列指定佇列同步執行
// 目標佇列
dispatch_queue_t targetQueue = dispatch_queue_create("target", DISPATCH_QUEUE_SERIAL);
// 建立一個序列佇列
dispatch_queue_t queue1 = dispatch_queue_create("sk1", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t queue2 = dispatch_queue_create("sk2", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t queue3 = dispatch_queue_create("sk3", DISPATCH_QUEUE_SERIAL);
// 列印1 2 3 為一個統一的任務。一個任務被拆分成多個任務放到多個序列佇列中去,但是執行順序還是要保持和 在一個序列佇列中的一致效果。例如說 列印順序為 1 2 3
// 變更優先順序
// 追加到目標序列佇列中 防止處理並行執行
dispatch_set_target_queue(queue3, targetQueue);
dispatch_set_target_queue(queue1, targetQueue);
dispatch_set_target_queue(queue2, targetQueue);
dispatch_async(queue1, ^{
sleep(1);
NSLog(@"Hello from queue1");
});
dispatch_async(queue2, ^{
sleep(1);
NSLog(@"Hello from queue2");
});
dispatch_async(queue3, ^{
sleep(1);
NSLog(@"Hello from queue3");
});
// 列印結果
2018-12-13 11:03:58.880544+0800 SK_Thread_Demo[5310:79080] Hello from queue1
2018-12-13 11:03:59.885092+0800 SK_Thread_Demo[5310:79080] Hello from queue2
2018-12-13 11:04:00.886197+0800 SK_Thread_Demo[5310:79080] Hello from queue3
相關文章
- GCD裡的全域性佇列GC佇列
- 佇列 和 迴圈佇列佇列
- 3-主題和佇列佇列
- 佇列、阻塞佇列佇列
- 佇列-單端佇列佇列
- 主佇列&主執行緒佇列執行緒
- 棧和佇列佇列
- 【佇列】【懶排序】佇列Q佇列排序
- 陣列模擬佇列 以及佇列的複用(環形佇列)陣列佇列
- 佇列 手算到機算 入門 佇列 迴圈佇列佇列
- 圖解--佇列、併發佇列圖解佇列
- 單調佇列雙端佇列佇列
- 佇列佇列
- RabbitMQ 訊息佇列之佇列模型MQ佇列模型
- Kafka 延時佇列&重試佇列Kafka佇列
- netcore下RabbitMQ佇列、死信佇列、延時佇列及小應用NetCoreMQ佇列
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列
- 稀疏陣列、佇列陣列佇列
- 阻塞佇列一——java中的阻塞佇列佇列Java
- synchronized 中的同步佇列與等待佇列synchronized佇列
- Chapter 2 棧和佇列APT佇列
- ModStart排程和佇列佇列
- java佇列Java佇列
- aardio 佇列佇列
- 棧、佇列佇列
- 棧-佇列佇列
- 佇列,棧佇列
- 實現簡單延遲佇列和分散式延遲佇列佇列分散式
- 佇列的一種實現:迴圈佇列佇列
- Python佇列的三種佇列實現方法Python佇列
- 佇列(楊輝三角)——鏈式佇列佇列
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- 三、資料結構演算法-棧、佇列、優先佇列、雙端佇列資料結構演算法佇列
- 線性結構 佇列與棧佇列
- 畫江湖之資料結構【第二話:佇列和棧】佇列資料結構佇列
- 畫江湖之資料結構 [第二話:佇列和棧] 佇列資料結構佇列
- Java版-資料結構-佇列(迴圈佇列)Java資料結構佇列
- 訊息佇列系列一:訊息佇列應用佇列