国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

GCD(二)之dispatch queue 簡述

2019-11-06 09:53:35
字體:
來源:轉載
供稿:網友
  首先讓我看一下API     Dispatch是一個通過簡單但強大的API表達并發性的抽象模型。        在核心,調度提供可以提交塊的串行FIFO隊列。提交到這些調度隊列的塊在池上被調用    的線程完全由系統管理。不保證    將調用哪個線程的塊;然而,保證只有一個提交到FIFO調度隊列的塊將被一次調用。當多個隊列具有要處理的塊時,系統可以自由地    分配附加線程以并發調用塊。當隊列變為空時,這些線程會自動釋放。    抽象    調度隊列按FIFO順序調用提交給它們的塊。隊列每次只調用一個塊,但是獨立的隊列可以各自相對于彼此同時調用它們的塊。        討論    調度隊列是可以提交塊的輕量級對象。    系統管理一個線程池,它處理調度隊列并調用提交給它們的塊。        在概念上,調度隊列可以具有其自己的執行線程,并且隊列之間的交互是高度異步的。        調度隊列通過調用dispatch_retain()和dispatch_release()來引用計數。提交到隊列的掛起塊還保存對隊列的引用,直到它們完成。一旦對一個隊列的所有引用被釋放,該隊列將被系統釋放。    FIFO 是 first in first out 先進先出 dispatch queue 就是調度隊列, block就是塊,很形象.                首先要創建一個隊列,三種方式    1.dispatch_get_main_queue()  主隊列,不必多說          2.dispatch_get_global_queue(<#long identifier#>, <#unsigned long flags#>) 這個比較常用,全局隊列,為系統為我們開啟的一些全局線程。第一個參數是設置優先級,而flag作為保留字段備用(一般為0)。優先級是一下四個等級    DISPATCH_QUEUE_PRIORITY_HIGH    分派到隊列的項將以高優先級運行,即隊列將被調度為在任何默認優先級或低優先級隊列之前執行。     DISPATCH_QUEUE_PRIORITY_DEFAULT    分派到隊列的項目將以默認優先級運行,即隊列將在所有高優先級隊列被調度之后但在任何低優先級隊列被調度之前被調度執行。    DISPATCH_QUEUE_PRIORITY_LOW    分配到隊列的項目將以低優先級運行,在所有默認優先級和高優先級隊列都被調度之后,隊列將被調度執行。     DISPATCH_QUEUE_PRIORITY_BACKGROUND    分派到隊列的項目將以后臺優先級運行,即隊列將被調度以在所有較高優先級隊列被調度之行執行    ,并且系統將在具有根據設置優先級(2)的后臺狀態的線程上在該隊列上運行項目,(磁盤I / O    被節制,并且線程的調度優先級設置為最低值)。        第一個線程名稱,選填,本事天空的第二個是:串行(DISPATCH_QUEUE_SERIAL), 并行(DISPATCH_QUEUE_CONCURRENT)選擇    dispatch_queue_t t = dispatch_queue_create(const char *label, dispatch_queue_attr_t attr)        第一個是線程名稱,選填或者填NULL    第二個是:串行(DISPATCH_QUEUE_SERIAL), 并行(DISPATCH_QUEUE_CONCURRENT)選擇        dispatch_queue_get_label(dispatch_queue_t queue)    根據上一個方法,這里給出的是隊列的名字        dispatch_queue_set_specific(dispatch_queue_t queue, const void *key, void *context, dispatch_function_t destructor)    dispatch_queue_get_specific(<#dispatch_queue_t queue#>, <#const void *key#>)//這兩個方法用到是可重入,比較麻煩,留坑        //異步隊列,不堵塞線程    dispatch_async(dispatch_queue_t queue, ^{        //麻煩的操作        dispatch_async(dispatch_get_main_queue(), ^{            //更新UI        })    });    //同步隊列,堵塞線程    dispatch_sync(dispatch_queue_t queue, ^{            });    //重復    dispatch_apply(5, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) {    //第一個參數是重復的次數,第二個隊列,第三個是需要做的事情 i是自己設定的,表示第幾次    });        //延遲    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{        //第一個是延遲多少秒,block中填延遲這些秒之后做的事情        //注意這里是main隊列里面來執行某些操作            });       // dispatch_get_current_queue()這是一個被拋棄的超級厲害的方法,可以獲得當前進程使用的隊列
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安义县| 略阳县| 伊吾县| 宁城县| 调兵山市| 雅安市| 休宁县| 福州市| 老河口市| 涪陵区| 枣强县| 兴和县| 迁西县| 玉田县| 公主岭市| 禹州市| 镇沅| 红原县| 磐石市| 新乡县| 丁青县| 高淳县| 龙岩市| 仁布县| 荣昌县| 中卫市| 平罗县| 惠水县| 阿拉善右旗| 富裕县| 万全县| 凤庆县| 乳山市| 乌鲁木齐县| 奈曼旗| 信丰县| 德安县| 东辽县| 久治县| 越西县| 南康市|