首先線程是什么?
進程要想執(zhí)行任務,必須要有線程,而且每個進程至少要有一條線程
線程是進程的基本執(zhí)行單元,進程中的所有任務都在線程中執(zhí)行,比如酷狗播放音樂,使用迅雷下載電影,都要在線程中執(zhí)行
程序啟動的時候它會默認開啟一條線程
一個進程中可以有多個線程
其次什么是多線程
一個進程中可以開啟多條線程,多條線程可以”同時”執(zhí)行不同的任務
有時候程序會出現(xiàn)阻塞的問題,而多線程就可以解決程序阻塞這個問題
多線程的有點就是能夠提高程序的執(zhí)行效率,給用戶良好的用戶體驗
多線程的執(zhí)行原理
單核 CPU 同一時間只能處理一個線程,只有一個線程在執(zhí)行任務
多線程的同時執(zhí)行本質(zhì)上就是 CPU 在多條線程之間來回的快速切換,當CPU 的速度足夠快的時候,就造成了多線程同時執(zhí)行的假象,如果線程非常多, CPU 會在多條線程之間不斷的調(diào)度任務,就會造成性能低下
實現(xiàn)多線程有多種方案
比如 pthread, 這是一套通用的多線程 API, 適用于多個平臺,難度比較大,需要程序員管理線程的生命周期,所以就幾乎不用
NSThread, 使用起來更加的面對對象,簡單易用,可以直接操作線程對象,需要程序員管理線程的生命周期,用的也不太多
GCD的出現(xiàn)是為了替代 NSThread 等線程技術,是純 C 語言的框架,它的生命周期不需要程序員管理,它會自動管理,所以現(xiàn)在使用的場景比較多,性能最好,代碼也最簡單
NSOperation 是封裝了 GCD, 比 GCD 簡單實用,它的周期也是自動管理不需要程序員去管理,使用的也比較多