多線程基本概論multithread

多線程

基本概念

進程

  • 進程是指在系統中正在運行的一個應用程序
  • 每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內
  • 通過 活動監視器 可以查看 Mac 系統中所開啓的進程

線程

  • 進程要想執行任務,必須得有線程,進程至少要有一條線程
  • 程序啓動會默認開啓一條線程,這條線程被稱爲主線程UI 線程
  • 線程是進程的基本執行單元,進程的所有任務都在線程中執行

多線程

  • 一個進程中可以開啓多條線程,每條線程可以同時執行不同的任務
    • 進程 -> 公司
    • 線程 -> 員工
    • 主線程 -> 老闆(第一個員工)
  • 多線程技術可以提高程序的執行效率

多線程原理

  • 同一時間,CPU只能處理一條線程,只有一條線程在執行
  • 多線程同時執行,其實是CPU快速地在多條線程之間切換
  • 如果CPU調度線程的時間足夠快,就造成了多線程併發執行的假象
  • 如果線程非常多,會在多條線程之間來回切換,消耗大量的 CPU 資源
    • 每個線程被調度的次數會降低
    • 線程的執行效率會下降
      這裏寫圖片描述

iOS 8.0 主線程的默認堆棧大小也是 512K

多線程優缺點

優點

  • 能適當提高程序的執行效率
  • 能適當提高資源利用率(CPU、內存利用率)

缺點

  • 開啓線程需要佔用一定的內存空間,如果開啓大量的線程,會佔用大量的內存空間,降低程序的性能
  • 線程越多,CPU在調度線程上的開銷就越大
  • 程序設計更加複雜:比如線程之間的通信、多線程的數據共享

主線程

  • 程序啓動創建的線程,被稱爲主線程UI 線程
  • 主線程的作用
    • 顯示/刷新 UI 界面
    • 處理 UI 事件:點擊滾動拖拽等事件

注意:要將耗時操作放在後臺線程執行,否則會影響 UI 的流暢度,破壞用戶體驗

  • 所有網絡訪問都是耗時操作!

iOS中多線程的實現方案

方案 簡介 語言 線程生命週期 使用頻率
pthread
    一套通用的多線程API適用於 Unix / Linux / Windows 等系統跨平臺\可移植使用難度大
C 程序員管理 幾乎不用
NSThread
    使用更加面向對象簡單易用,可直接操作線程對象
OC 程序員管理 偶爾使用
GCD
    旨在替代NSThread等線程技術充分利用設備的多核
C 自動管理 經常使用
NSOperation
    基於GCD(底層是GCD)比GCD多了一些更簡單實用的功能使用更加面向對象
OC 自動管理 經常使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章