一、進程 進程可以理解為一個應用程式;比如說打開 QQ,那麼在記憶體中就會為 QQ 分配一塊進程;打開微信,那麼在記憶體中就會為 微信 分配一塊進程;並且進程之間是相互獨立的 二、線程 1. 基本概念 線程是進程的基本單元(可以理解為一個進程中的各個操作);比如說 QQ,其中的很多操作,比如說發送文件, ...
一、進程
進程可以理解為一個應用程式;比如說打開 QQ,那麼在記憶體中就會為 QQ 分配一塊進程;打開微信,那麼在記憶體中就會為 微信 分配一塊進程;並且進程之間是相互獨立的
二、線程
1. 基本概念
線程是進程的基本單元(可以理解為一個進程中的各個操作);比如說 QQ,其中的很多操作,比如說發送文件,下載圖片等,這些都是子線程
例如 xcode 進程中的線程
一個進程最少有一個線程,稱為主線程
進程的各個操作都是在主線程或子線程中完成的
2. 串列、並行
串列和並行都是針對線程而言的
串列
串列是指一個線程中的任務一個一個執行,即上一個任務執行完,下一個任務才能繼續;即在同一時間內,只能執行一個任務
如圖
可以看出,串列的耗時是所有任務的總和
並行
並行是指一個線程中的任務可以同時進行;即在同一時間內可以進行多個任務
如圖
3. 多線程
1)概念
因為每個進程最少都一個線程(主線程),在主線程中還可以創建多個子線程,並且主線程和子線程中的任務是互不幹涉的;
也就是說,在同一時間內,可以同時進行主線程和子線程中的任務
如圖
2)原理
a. 單核操作系統
在單核操作系統上,因為在同一時間內只能運行一個任務,那如何實現多線程呢??
系統會為每一個線程指定一個確定的執行時間,當然這個時間很短,然後在各個線程之間做切換(調度),以此來達到多線程
如圖
可以看出,單核操作系統的多線程實際上還是串列的,只不過在時間很短的情況下進行線程之間的切換,所以看起來就好像是多線程了
b. 多核操作系統
在多核操作系統上,在同一時間內可以運行多個任務,所以很容易實現多線程,並且是真正的多線程
如圖
3)優缺點
a. 優點
能提高 CPU 的利用率和執行效率
b. 缺點
消耗記憶體(創建一個新的線程會消耗一定的記憶體)
如果開啟的線程過多,那麼 CPU 的開銷就越大
4)iOS 的多線程
iOS 應用在啟動後,只會開啟一條線程(主線程,也稱 UI 線程)
通常,在 主線程 中做一些不耗時的工作;例如 刷新 UI 界面、監控事件等