參考簡書: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í)行下一個任務

- 下面是驗證串行任務異步執(zhí)行 串行是FIFO(先進先出),并且一個執(zhí)行完再執(zhí)行別的

- 下面對上面的代碼修改一下將異步改為同步,看會出現(xiàn)什么情況

- 接下來看并發(fā)異步的執(zhí)行

- 它的執(zhí)行效果是這樣的
