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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

GCD線程隨筆

2019-11-09 18:00:16
字體:
供稿:網(wǎng)友

1  GCD提供兩種類型的queue,在

dispatch_queue_t queue = dispatch_queue_create(<#const char * _Nullable label#>, <#dispatch_queue_attr_t  _Nullable attr#>)

第一個參數(shù)一般使用逆序全稱域eg: com.example.customtypeQueue,第二個參數(shù)使用DISPATCH_QUEUE_SERIAL 或者 DISPATCH_QUEUE_CONCURRENT,一般只在引起資源競爭的操作是使用 DISPATCH_QUEUE_SERIAL類型的queue 來避免資源競爭,大部分情況下依然使用DISPATCH_QUEUE_CONCURRENT類型的queue.同步執(zhí)行為順序執(zhí)行,按照添加任務(wù)的先后順序順序執(zhí)行,并行執(zhí)行不按照先后順序,同時執(zhí)行多個任務(wù),

   1 當(dāng)向serial類型的queue使用dispatch_asyn多次添加任務(wù)后,任務(wù)的執(zhí)行會按照添加的先后順序順序執(zhí)行(串行),但是,當(dāng)創(chuàng)建多個serial類型的queue時,并且給每個queue分別添加任務(wù)后,這些任務(wù)的執(zhí)行順序是不分先后的,即多個serial類型的queue之間依然是并行執(zhí)行,互不影響;

         (在手動創(chuàng)建的串行隊列中添加異步(并發(fā))執(zhí)行的任務(wù),任務(wù)的執(zhí)行也是同步執(zhí)行)

     2  當(dāng)向同一個concurrent類型的queue使用dispatch_asyn添加多個任務(wù)后,這些任務(wù)的執(zhí)行是并行執(zhí)行的;      

         (當(dāng)向手動創(chuàng)建的并行隊列中添加異步執(zhí)行的任務(wù),任務(wù)的執(zhí)行是并行執(zhí)行,多個任務(wù)之間部分先后順序)

     3  當(dāng)向serial類型的queue使用sipatch_syn多次添加任務(wù)后,任務(wù)的執(zhí)行按添加任務(wù)的先后順序串行執(zhí)行;

         (當(dāng)想手動創(chuàng)建的串行行隊列中添加同步執(zhí)行的任務(wù),任務(wù)的執(zhí)行仍然是同步執(zhí)行)

     4  當(dāng)向concurrent類型的queue使用dispatch_syn添加多個任務(wù)時,多個任務(wù)依然是按照添加的先后順序串行執(zhí)行.

         (當(dāng)向手動創(chuàng)建的并行隊列中添加同步執(zhí)行的任務(wù),任務(wù)的執(zhí)行是同步執(zhí)行)

    除了使用自己創(chuàng)建的queue外,我們還可以使用系統(tǒng)提供的queue,dispatch_get_main_queue()方法獲得當(dāng)前程序的主線程,主線程只有一個,值得注意的是該線程屬于DISPATCH_QUEUE_SERIAL類型,使用方法參考上述四點,另外還有dispatch_get_gloabal_queue(DISPATCH_QUEUE_PRIORITY_四種優(yōu)先級,0)方法可以獲得系統(tǒng)提供的四中不同優(yōu)先級的queue,這四種類型的queue是DISPATCH_QUEUE_CONCURRENT類型,使用方法參考上述四點.

    另外,OC中的三種暫停方法:sleep()函數(shù)和 [NSThread sleepForTimeInterval:]方法影響的是該函數(shù)所處的線程,并不一定是主線程 dispatch_after 方法一定是延遲的主線程類似于performSelector方法,使用NSTimer方法控制暫停在此就不過多描述了,網(wǎng)上很多. 后續(xù)會再次補上有關(guān)GCD更多的使用方法

    //dispatch_set_target_queue

    dispatch_set_target_queue(queue1, targetQueue)方法將制定queue的優(yōu)先級設(shè)置為targetQueue一樣的queue,若targetQueue的類型SERIAL,則根據(jù)該方法設(shè)置過的queue的先后順序,順序執(zhí)行所有被設(shè)置過的queue,若掛起某一個queue,則其他queue的執(zhí)行受阻;若targetQueue的類型為CONCURRENT類型,則并行執(zhí)行所有被設(shè)置過的queue,若掛起某一個queue,不影響其他queue的執(zhí)行.(線程掛起與恢復(fù)的方法:

 //掛起

    dispatch_suspend(<#dispatch_object_t  _Nonnull object#>)

    //恢復(fù)

    dispatch_resume(<#dispatch_object_t  _Nonnull object#>)

)

    dispatch_set_target_queue(queue1,targetQueue);

    dispatch_set_target_queue(queue2,targetQueue);

    dispatch_set_target_queue(queue3,targetQueue);

    

     

    


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 垣曲县| 宜城市| 民丰县| 昭通市| 呼图壁县| 庆阳市| 五常市| 桃园县| 乌苏市| 延庆县| 临安市| 甘南县| 临泽县| 剑阁县| 周宁县| 长春市| 布拖县| 山阴县| 和林格尔县| 桑植县| 扎兰屯市| 常州市| 乌鲁木齐县| 墨江| 达州市| 自贡市| 马龙县| 永州市| 开远市| 蓝山县| 凤庆县| 佳木斯市| 弥勒县| 湘潭县| 香格里拉县| 鹤岗市| 宁晋县| 临泽县| 昌乐县| 韶山市| 澎湖县|