前言
簡書的賬號其實申請很久了捂寿,因為工(自)作(己)的(很)原(懶)因,就沒有怎么寫博客抬伺,但作為一名"偏執(zhí)的技術狂"(偽技術)怎顾,我還是覺得需要寫博客读慎,所以也就寫下了這篇博客了。
基本概念
在了解和學習iOS的多線程技術之前我們需要先了解幾個概念
-
進程
所謂的進程指的是在系統中正在運行的一個應用程序槐雾,其實夭委,每個進程之間都是獨立的,每個進程俊運行在其專用且受保護的內存空間之中募强。 -
線程
線程其實就是一個進程(應用程序)執(zhí)行任務所需要的必備條件株灸,意思就是進程的所有任務都是在線程中完成的,每個進程都至少有一個線程擎值,而這至少為一個的線程就叫做</font>主線程慌烧。 -
多線程概念
在一個進程中,可以開啟多個線程同時進行工作鸠儿,可以多條線程并發(fā)執(zhí)行不同的任務杏死,多條線程并發(fā)執(zhí)行,而多線程技術也是依賴于多核CPU捆交,所謂的多線程并發(fā),其實就是CPU在快速的切換多條線程之間的調度腐巢。</font> -
iOS主線程概念
在iOS中的主線程品追,其實就是指一個iOS程序運行后,會默認開啟一條線程冯丙,而這個線程我們就稱之為主線程肉瓦,也有一些說法叫做UI線程遭京,而之所以叫做UI線程,是因為泞莉,在iOS程序中哪雕,處理無論是處理UI事件(比如點擊事件、滑動事件鲫趁、拖拽事件等等)以及顯示或者刷新UI界面都是在主線程完成的斯嚎,子線程并不具備處理這些事件的能力。
iOS中多線程技術的優(yōu)缺點
優(yōu)點
優(yōu)點一:在iOS中多線程技術的優(yōu)點可想而知挨厚,那就是它能適當的提高程序的執(zhí)行效率堡僻,舉個,好比一頭牛耕一畝地和石頭牛耕一畝地的區(qū)別
優(yōu)點二:無論是從CPU還是從內存方面疫剃,都能有效的提高這些資源的利用率
缺點
眾所周知钉疫,創(chuàng)建程序是有開銷,就好比你拉獅頭牛去耕地巢价,那十頭牛也是需要東西去喂養(yǎng)的牲阁,而在iOS程序下也是一樣的,在iOS下開啟多線程的成本就是:內核數據結構的上漲(一個線程大約1kb的量)壤躲、棾蔷眨空間的上漲等等缺點一:如果大量開啟線程,則會降低iOS程序的性能</font>
缺點二:線程越多柒爵,CPU的在調度線程上得開銷就越大役电,從而會產生耗電加速等一些問題
缺點三:線程開啟的越多,應用程序的設計就會更加復雜棉胀,比如說:線程之間的通信問題法瑟,多線程之間數據共享的一些問題就會隨之而來,所以在實際的iOS開發(fā)當中唁奢,多線程只是適當的開啟霎挟,而并不能大量的開啟。
iOS多線程的實現方案
在這部分內容中麻掸,我會詳細的進行分析和解答酥夭,所以在這里就直接寫iOS多線程的實現方案了
-
pthread
一套基于C語言的Unix/Linux/Windows等系統的多線程技術方案,可跨平臺脊奋、可移植方案熬北,缺點就是線程生命周期需要手動管理。 -
NSThread
基于OC語言的多線程實現方案诚隙,相對于pehread而言讶隐,更加面向對象開發(fā),優(yōu)點就是可以直接對線程進行操作久又,缺點任然是需要手動管理線程的生命周期 -
GCD
基于C語言開發(fā)巫延,iOS中多線程的重要實現方案之一效五,充分利用了設備的多核性質,線程生命周期不需要手動管理 -
NSOPeration
基于OC開發(fā)炉峰,其本質是蘋果基于GCD的一套封裝畏妖,保留了GCD的優(yōu)點,使之更加面向對象開發(fā)