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

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

GCD線程隨筆

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

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

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

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

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

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

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

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

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

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

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

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

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

    另外,OC中的三種暫停方法:sleep()函數(shù)和 [NSThread sleepForTimeInterval:]方法影響的是該函數(shù)所處的線程,并不一定是主線程 dispatch_after 方法一定是延遲的主線程類似于performSelector方法,使用NSTimer方法控制暫停在此就不過多描述了,網(wǎng)上很多. 后續(xù)會(huì)再次補(bǔ)上有關(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,若掛起某一個(gè)queue,則其他queue的執(zhí)行受阻;若targetQueue的類型為CONCURRENT類型,則并行執(zhí)行所有被設(shè)置過的queue,若掛起某一個(gè)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ā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 海淀区| 庐江县| 卓资县| 海阳市| 池州市| 南开区| 衡南县| 金湖县| 酒泉市| 德安县| 长阳| 郑州市| 白朗县| 怀化市| 桑日县| 贡觉县| 深圳市| 高邮市| 嵊州市| 河曲县| 永登县| 余干县| 莫力| 内黄县| 巴塘县| 通州市| 晴隆县| 尤溪县| 久治县| 集安市| 济南市| 丰县| 黔南| 额尔古纳市| 黄浦区| 汾西县| 新野县| 新兴县| 瑞昌市| 庆阳市| 永济市|