日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS经典面试题之分析GCD的dispatch_group任务执行问题

發(fā)布時間:2024/5/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS经典面试题之分析GCD的dispatch_group任务执行问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

① dispatch_group 異步執(zhí)行任務(wù)

  • 現(xiàn)有以下調(diào)度組 dispatch_group 執(zhí)行多個任務(wù),將 dispatch_group_notify 放在調(diào)度組異步執(zhí)行任務(wù),那么它們的任務(wù)執(zhí)行順序是怎么樣的呢?
dispatch_group_t group = dispatch_group_create();dispatch_queue_t queue = dispatch_get_global_queue(0, 0);dispatch_group_enter(group);dispatch_async(queue, ^{sleep(1);NSLog(@"任務(wù)1");dispatch_group_leave(group);});dispatch_group_enter(group);dispatch_async(queue, ^{NSLog(@"任務(wù)2");dispatch_group_leave(group);});dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"任務(wù)3:主線程更新UI");});NSLog(@"任務(wù)4:主線程正在執(zhí)行");
  • 執(zhí)行程序,結(jié)果如下:
任務(wù)4:主線程正在執(zhí)行任務(wù)2任務(wù)1任務(wù)3:主線程更新UI
  • 分析:
    • dispatch_group 執(zhí)行任務(wù)開始時, 程序由上到下執(zhí)行任務(wù)1、任務(wù)2、任務(wù)3、任務(wù)4;
    • 由于任務(wù)4沒有在調(diào)度組中,因此優(yōu)先執(zhí)行;
    • 然后有兩個調(diào)度組異步執(zhí)行任務(wù)1和任務(wù)2,最后再通知主線程執(zhí)行任務(wù)3;
    • 由于第一個任務(wù)1中線程sleep(1),因此任務(wù)2會比任務(wù)1優(yōu)先完成;
    • 最后再通知主線程執(zhí)行任務(wù)3,更新UI。

② 如果將 dispatch_group_notify 移動到最前面,能否執(zhí)行?執(zhí)行結(jié)果是怎樣的呢?

  • 代碼修改如下:
dispatch_group_t group = dispatch_group_create();dispatch_queue_t queue = dispatch_get_global_queue(0, 0);dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"任務(wù)3:主線程更新UI");});dispatch_group_enter(group);dispatch_async(queue, ^{sleep(1);NSLog(@"任務(wù)1");dispatch_group_leave(group);});dispatch_group_enter(group);dispatch_async(queue, ^{NSLog(@"任務(wù)2");dispatch_group_leave(group);});NSLog(@"任務(wù)4:主線程正在執(zhí)行");
  • 執(zhí)行結(jié)果如下:
任務(wù)4:主線程正在執(zhí)行任務(wù)2任務(wù)3:主線程更新UI任務(wù)1
  • 可以看到程序能正常執(zhí)行,但是只要有 enter-leave 成對匹配,notify 就會執(zhí)行,不會等兩個調(diào)度組都執(zhí)行完畢,即只要 enter-leave 成對程序就可以執(zhí)行。

③ 再加一個enter,即 enter:wait 是 3:2,能否執(zhí)行 notify ?

  • 修改代碼如下:
dispatch_group_t group = dispatch_group_create();dispatch_queue_t queue = dispatch_get_global_queue(0, 0);dispatch_group_enter(group);dispatch_async(queue, ^{sleep(1);NSLog(@"任務(wù)1");dispatch_group_leave(group);});dispatch_group_enter(group);dispatch_async(queue, ^{NSLog(@"任務(wù)2");dispatch_group_leave(group);});dispatch_group_enter(group);dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"任務(wù)3:主線程更新UI");});NSLog(@"任務(wù)4:主線程正在執(zhí)行");
  • 執(zhí)行結(jié)果如下:
任務(wù)4:主線程正在執(zhí)行任務(wù)2任務(wù)1
  • 可以看到,程序不能正常執(zhí)行完畢,會一直等待,這是因?yàn)榈却?leave 的執(zhí)行,最后才會執(zhí)行 notify。
  • 如果 dispatch_group_enter 比 dispatch_group_leave 多,由于 value 不等于 dsema_orig 不會走到喚醒邏輯, dispatch_group_notify 中的任務(wù)無法執(zhí)行或者 dispatch_group_wait 收不到信號而卡住線程。

④ 如果是 enter:wait 是 2:3,能否執(zhí)行 notify ?

  • 修改代碼如下:
dispatch_group_t group = dispatch_group_create();dispatch_queue_t queue = dispatch_get_global_queue(0, 0);dispatch_group_enter(group);dispatch_async(queue, ^{sleep(1);NSLog(@"任務(wù)1");dispatch_group_leave(group);});dispatch_group_enter(group);dispatch_async(queue, ^{NSLog(@"任務(wù)2");dispatch_group_leave(group);});dispatch_group_leave(group);dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"任務(wù)3:主線程更新UI");});NSLog(@"任務(wù)4:主線程正在執(zhí)行");
  • 執(zhí)行程序之后,可以看到程序會延遲崩潰在任務(wù)1的 dispatch_group_leave(group),這是因?yàn)?enter-leave 沒有成對匹配,dispatch_group 沒有 enter 卻需要 leave,導(dǎo)致 value 不等于 dsema_orig 不會執(zhí)行喚醒邏輯。

總結(jié)

以上是生活随笔為你收集整理的iOS经典面试题之分析GCD的dispatch_group任务执行问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩激情片 | 精品人妻人伦一区二区有限公司 | 蜜桃视频免费网站 | 777奇米色 | av大片在线播放 | 青娱乐极品视频在线 | 五月天看片 | 90岁老太婆乱淫 | 一级毛片黄色 | 色多多视频网站 | 呦呦色 | 91香蕉一区二区三区在线观看 | 午夜合集 | 中文字幕永久在线播放 | 成年人在线观看网站 | 黄色高清免费 | 亚洲欧洲国产日韩 | 草草草在线视频 | 欧美日韩a级片 | 欧美午夜精品一区二区蜜桃 | 亚洲图片激情小说 | 色撸撸在线视频 | 黄色激情四射 | 强开小受嫩苞第一次免费视频 | 黑人巨大精品人妻一区二区 | 天天操天天干视频 | 日韩资源 | 国产欧美一区二区精品性色超碰 | 2019中文字幕在线观看 | 法国空姐在线观看视频 | 日噜| 欧美成在线观看 | 麻豆av在线 | 91精品国产91久久久久久 | 免费a级 | 夜夜撸小说 | 97国产精品视频 | 校园春色中文字幕 | av电影免费在线播放 | 欧美成年人在线观看 | 69久久夜色精品国产69 | 中文成人在线 | 美腿丝袜亚洲色图 | 精品人妻伦一二三区免费 | 国产色婷婷一区二区三区竹菊影视 | 精品不卡一区二区三区 | 欧美日韩大片在线观看 | 欣赏asian国模裸体pics | 色亚洲色图 | 色视频网站 | jizzjizz黄大片| 国产在线久 | 无套白嫩进入乌克兰美女 | 亚洲性生活视频 | 波多野结衣一区二区三区在线观看 | av在线免费播放网站 | 久久亚洲无码视频 | 国产一在线 | 欧美成人性生活 | 一区二区伦理 | 国产一区二区三区免费 | 日韩网站免费观看高清 | 日本中文一区 | 加勒比视频在线观看 | 神马午夜91 | 狠狠婷| www.97av.com| 国产深夜视频 | 无码任你躁久久久久久久 | 99热最新网址 | 欧美美女一区二区 | 国产91精品久久久久 | av电影一区二区 | 性爱视频免费 | 波多野结衣视频在线 | 色视频国产 | 医生强烈淫药h调教小说视频 | 伊人射| 午夜网址 | 黑人又大又粗又长 | 少妇一区二区视频 | 成人动漫在线观看视频 | av手机天堂| 人人看超碰 | 欧美精品123区 | 亚洲成人高清 | 亚洲综合第一 | 免费在线观看的黄色网址 | 欧美黄色免费视频 | 亚洲免费观看高清在线观看 | 日一区二区三区 | 无码日韩人妻精品久久蜜桃 | 色综合久久88色综合天天6 | 日韩一级免费观看 | 国产在线观看免费视频今夜 | 高清人妖shemale japan | 三级网站免费观看 | 国产日韩欧美一区 | 黄色大片a级|