多線程之---讓頁面假死與卡死

參考簡書:http://www.itdecent.cn/p/be70bd238af0

  • 線程與進程
  • 進程:正在運行的一個程序,主要負責資源分配以及資源的調(diào)度,不執(zhí)行具體的代碼
  • 線程:可獨立執(zhí)行的代碼段,它是程序的具體執(zhí)行單位
  • 一個程序至少會有一個線程(主線程) 界面的刷新必須在主線程完成
  • 假死 頁面假死一般指的是程序還在運行,而界面動不了.一般是因為當前執(zhí)行的任務耗時過長

  • 卡死 一般是指線程卡死

  • 任務分為 同步與異步

  • 同步(sync)

  • 異步(async)

  • 同步與異步的主要區(qū)別在于回不回堵塞當前線程,直到Block中的任務執(zhí)行完畢

  • 在GCD中如果是同步(sync)的操作,它會阻塞當前線程并等待Block中的任務執(zhí)行完畢,然后當前線程才會繼續(xù)往下執(zhí)行

  • 如果是異步(async)

  • 隊列分為 并發(fā)隊列 串行隊列

理解一下串行隊列以及并行隊列的區(qū)別

  • 通俗點說:串行隊列,就相當于目前只有一條小路,路一次只能過一個人,那么前面的人把路給堵死了后面的也就無法前進而被堵住了

  • 串行隊列:放到傳行隊列的任務,GCD會FIFO(先進先出)地取出來一個,執(zhí)行一個,然后取下一個,一個一個得執(zhí)行下去

  • 并行隊列:相當于不止是一條路,就算這條路被堵死了,我還可以走別的路,互相不影響

  • 并行隊列中的任務:CGD也會FIFO地取出來,但不同的是,它取出來一個就會放到別的線程,然后再取出來一個放到另一個的線程.這樣由于取的動作很快,忽略不計,看起來,所有的任務都是一起執(zhí)行的.不過需要注意,GCD會根據(jù)系統(tǒng)資源控制并行的數(shù)量,所以如果任務很多,它并不會讓所有的任務同時執(zhí)行

  • 特別需要注意:同步,異步,并發(fā),串行四個術語

  • 1:同步與異步主要影響,能不能開啟新的線程

  • 同步:只是在當前線程總執(zhí)行任務,不具備開啟新線程的能力

  • 異步:可以在新的線程中執(zhí)行任務,具備開啟新線程的能力

  • 2: 并發(fā)和串行主要影響:任務的執(zhí)行方式

  • 并發(fā):多個任務并發(fā)執(zhí)行,誰先執(zhí)行完成不一定

  • 串行:一個任務執(zhí)行完畢后,再執(zhí)行下一個任務

屏幕快照 2015-12-21 17.01.23.png
  • 下面是驗證串行任務異步執(zhí)行 串行是FIFO(先進先出),并且一個執(zhí)行完再執(zhí)行別的
屏幕快照 2016-03-08 19.19.13.png
  • 下面對上面的代碼修改一下將異步改為同步,看會出現(xiàn)什么情況
屏幕快照 2016-03-08 19.23.48.png
  • 接下來看并發(fā)異步的執(zhí)行
屏幕快照 2016-03-08 19.32.50.png
  • 它的執(zhí)行效果是這樣的
屏幕快照 2016-03-08 19.31.14.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容