OC多線程學習(一) - 線程的相關概念

1. 進程和線程的定義和關系


線程

  1. 線程是進程的進本執行單元,一個進程的所有任務都在線程中執行
  2. 進程中至少得有一個線程。程序啟動后默認開啟一條線程,這條線程被叫做主線程UI線程

進程

  1. 進程指系統中執行的一個應用程序
  2. 每個進程之間是獨立的,并且進程運行在專用的且受保護的內存空間中

Mac系統中活動監視器

通過Mac系統中的“活動監視器”能夠看到系統中開啟的進程


  • 圖中展示了當前系統中開啟的進程和進程中開啟的線程
  • 有icon的說明有用戶界面;沒有icon是沒有用戶界面;

進程和線程的關系

  • 進程中的線程共享本進程中的地址空間。進程之間是互相獨立的地址空間
  • 進程中的線程共享本進程中的資源,如內存、I/O、CPU等。進程之間是資源獨立的。

通過以上的關系可以推到出:

  1. 進程崩潰后,不會影響其他進程。但是線程崩潰后,整個進程就崩潰了。
  2. 進程切換時,消耗資源大。所以涉及到頻繁切換時,使用線程要優于進程。如果想要資源進行并發操作時,只能使用線程。
  3. 進程有一個程序入口,但是線程不能獨立執行,必須在進程(應用程序)中。
  4. 線程是CPU基本調度單元,進程不是。
  5. 線程沒有地址空間,線程是包含在進程的地址空間中。

2. 多線程


優點

  • 能適當提?程序的執?效率
  • 能適當提?資源的利?率(CPU,內存)
  • 線程上的任務執?完成后,線程會?動銷毀

缺點

  • 開啟線程需要占??定的內存空間(默認情況下,每?個線程都占 512 KB)
  • 如果開啟?量的線程,會占??量的內存空間,降低程序的性能
  • 線程越多,CPU 在調?線程上的開銷就越?
  • 程序設計更加復雜,?如線程間的通信、多線程的數據共享

多線程技術方案

  • pthread:一套通用的多線程API,適用于Unix、Linux、Windows等操作系統。使用C語言,需要開發人員管理線程的生命周期。
  • NSThread:更加面向對象,使用OC語言,也是需要開發人員管理線程的生命周期。
  • GCD:蘋果提供的替代NSThread的方案,使用C語言實現,不需要開發人員管理線程生命周期。
  • NSOperation:基于GCD,使用上更加面向對象。語言是OC,同樣不需要開發人員管理線程聲明周期。

擴展 - C與OC橋接相關

  • __bridge: 只做類型轉換,但是不修改對象內存的管理權。
  • __bridge_retained:也可以使用CFBridgingRetain,將OC對象轉換為Core Foundation對象,同時將對象內存的管理權交給開發人員,需要使用CFRelease或者相關方法進行釋放。
  • __bridge_transfer:也可以使用CFBridgingRelease,將Core Foundation對象轉換為OC對象,并將對象內存的管理權交給ARC。

3. 線程的生命周期


線程的生命周期中有的幾種狀態:就緒、運行、阻塞和死亡

  1. 新建線程T,然后調用start,線程T進入到就緒狀態。等待CPU的調度。
  2. CPU調度線程池中可調用的線程,如果調用T,此時T是運行狀態。如果調用了其他線程,那么T繼續保持就緒狀態。
  3. 如果代碼中調用了Sleep方法或者鎖相關的操作,T的狀態被調整成阻塞。Sleep到時候或者獲取到同步鎖,T再回復成就緒狀態,等待CPU的調度。重復步驟2
  4. 運行完美結束后,線程死亡。

線程池

線程池就是線程的集合容器。容器里管理著線程的創建、回收和重復利用線程。

使用線程池優點:通過線程池,可以做到對線程的管理,比如重復利用已經創建出來的線程,降低創建和銷毀線程時對性能的消耗。

大致的流程圖如下:


  • 大致進行了三個條件判斷:
    • 條件1:判斷線程數量
    • 條件2:判斷任務隊列
    • 條件3:判斷是否有閑著的線程
  • 先判斷條件1,線程池中的線程數是否小于核心線程數,不小于直接創建線程去執行任務
  • 如果條件1不滿足,條件2是去判斷任務隊列的狀況,如果任務隊列沒滿就將任務加入到隊列中,等待線程去執行。
  • 條件3如果有閑著線程,直接安排該線程去執行任務
  • 如果以上都不滿足,就要進行飽和策略的處理了。

飽和策略

  • AbortPolicy 直接拋出RejectedExecutionExeception異常來阻?系統正常運?。
  • CallerRunsPolicy 將任務回退到調?者
  • DisOldestPolicy 丟掉等待最久的任務
  • DisCardPolicy 直接丟棄任務

這四點可以聯想一下工作中的場景,如果當前非常的忙,已經是滿負荷的工作狀態,此時有一個新需求下來需要你做,那么:

  • AbortPolicy:整個人的心態崩了,沒法繼續工作。
  • CallerRunsPolicy:把需求推回給發起者,并告訴他,現在沒有時間,等有時間再去做。
  • DisOldestPolicy:做這個需求就得丟掉已經排好的需求表中優先級最低的任務,這樣才能按時完成全部工作。
  • DisCardPolicy:直接說這個需求做不了。

4. 線程與runloop

  1. 線程與runloop是一一對應的。
  2. 開啟runloop,相當于對線程是一種保活處理。線程執行完任務后會進入休眠狀態,有任務了就會被喚醒去執行任務。
  3. runloop在第一次獲取時被創建(類似懶加載的方式),線程結束時被銷毀。
  4. 主線程的runloop,是在程序啟動后默認創建好的。
  5. 子線程需要獲取一下(懶加載創建)才可以,比如在子線程使用定時器時,如果不獲取runloop,定時器是不會發生回調的。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容