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

首頁 > 系統(tǒng) > iOS > 正文

總結(jié)一下iOS的并發(fā)---之GCD

2019-11-09 14:28:19
字體:
供稿:網(wǎng)友

原創(chuàng)總結(jié),干貨,有誤歡迎指正,轉(zhuǎn)載請注明出處,謝謝。

1.  iOS多任務(wù)用啥好?

兩大利器:GCD與NSOperation

2. 為啥用這兩個東西,不直接用NSThread?

1)使我們更專注于實現(xiàn)功能,把tasks扔到Dispatch Queue,或者Operation Queue里,讓它們負(fù)責(zé)開辟回收線程,處理線程同步問題

2)   提供了解決 Race Condition, PRiority reverse 的能力。 ------- 有三個問題:共享資源訪問,優(yōu)先級反轉(zhuǎn),死鎖。

3)使用block,方便。

4)   提供控制task執(zhí)行的方法(暫停取消任務(wù),獲取任務(wù)狀態(tài),得到任務(wù)&所有任務(wù)完成的反饋); 多個task可以設(shè)定依賴關(guān)系,按順序執(zhí)行。

3. GCD分類

首先Dispatch Queue:  分為串行隊列,并行隊列。 也可分為系統(tǒng)queue,自定義queue。

1) main Queue : 串行隊列,對應(yīng)這UI主線程。

2) Global Queue: 并行。

3) 自定義,默認(rèn)串行,指定參數(shù)并行。

4.并行隊列有啥用?

好幾個task同時執(zhí)行,快。

5. 串行隊列有啥用?

1)隊列里的tasks如果需要先后順序關(guān)系, 2)解決同步訪問資源問題 Race Condition

6. GCD Group干啥的?

把任務(wù)放到隊列里的同時也可以放到Group里,目的是可以知道所有任務(wù)都結(jié)束了。使用 Group_notify

7.Dispatch queue 的 sync / async 注意事項:

1)sync 阻塞當(dāng)前線程,等待方法返回,這是和async的區(qū)別

2)不要在主線程(main queue)里調(diào)用sync ---卡住UI,感覺程序死掉了

3)   不要 currentQueue.sync , 這樣會把currentQueue阻塞了,然后還想讓它執(zhí)行任務(wù) ---- DeadLock.   當(dāng)然,swift里已經(jīng)不能currentQueue了。

4)queueA.sync { 這里邊別調(diào)用queueA} ---又是DeadLock.

5)sync各種不能用,哪用它做啥?? ------ 多個線程訪問共享資源的時候用 。。用 [private serial queue ].sync 實現(xiàn)get , 用[private serial queue ].async實現(xiàn)set。

 

8. 解決共享資源訪問

1)把dispatchBarrier 放到并發(fā)Queue里,先于執(zhí)行的仍然并行,dispatchBarrier串行, 之后的再并行。

2)private serial queue ----私有串行隊列--- 蘋果WWDC推薦方式,不推薦用Barrier了。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜宾县| 石狮市| 德保县| 鄂尔多斯市| 稷山县| 武山县| 沁源县| 同德县| 和平区| 沙坪坝区| 江源县| 北宁市| 皋兰县| 商丘市| 乃东县| 柘城县| 景谷| 龙南县| 德安县| 青浦区| 高尔夫| 五指山市| 泸水县| 巴林左旗| 镇康县| 昌黎县| 鄂伦春自治旗| 石河子市| 龙游县| 二连浩特市| 阳朔县| 齐齐哈尔市| 北海市| 济宁市| 安溪县| 司法| 略阳县| 通州区| 西吉县| 江川县| 祥云县|