日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS多线程简述

發布時間:2024/1/1 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS多线程简述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄


##基本概念

  • 進程:是指在系統中正在運行的一個應用程序。每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內。

  • 線程:線程是進程的基本執行單元

  • 進程和線程比較

    1.線程是CPU調用(執行任務)的最小單位。
    2.進程是CPU分配資源和調度的單位。
    3.一個程序可以對應多個進程,一個進程中可以有多個線程,但至少要有一個線程。
    4.同一個進程內的線程共享進程的資源。

  • 多線程:即1個進程中可以開啟多條線程,每條線程可以并行(同時)執行不同的任務。

  • 多線程的并行

    • 原理:多線程并發(同時)執行,其實是CPU快速地在多條線程之間調度(切換)
    • 優點:①能適當提高程序的執行效率;②能適當提高資源利用率(CPU、內存利用率)
    • 缺點:①開啟線程需要占用一定的內存空間,如果開啟大量的線程,會占用大量的內存空間,降低程序的性能;②線程越多,CPU在調度線程上的開銷就越大;③程序設計更加復雜:比如線程之間的通信、多線程的數據共享
  • iOS開發中多線程

    • 主線程: 一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程”;主要作用是:①刷新和顯示UI,②處理UI事件
    • 子線程:除了主線程之外的所有線程,也叫做后臺線程,`
    • 注意:①不要將耗時操作放到主線程中去處理,會卡住線程;②和UI相關的刷新操作必須放到主線程中進行處理;
  • iOS開發中多線程

    • pthread
    • NSThread
    • GCD
    • NSOperation

    四種技術方案的比較:

  • 技術方案簡介語言生命周期使用頻率
    pthread一套通用的多線程API,適用于Unix\Linux\Windows等系統,跨平臺\可移植,使用難度大.C程序員管理幾乎不用
    NSThread使用更加面向對象,簡單易用,可直接操作線程對象.OC程序員管理偶爾使用
    GCD旨在替代NSThread等線程技術,充分利用設備的多核.C自動管理經常使用
    NSOperation基于GCD(底層是GCD),比GCD多了一些更簡單實用的功能,使用更加面向對象.OC自動管理經常使用

    ##線程狀態
    線程的狀態有:創建,就緒,運行,阻塞,死亡,具體過程由下圖所示:

    • 創建線程后,當調用start方法時就會進入可調度線程池進入就緒狀態,
    • 如果CPU現在調度當前線程對象,則當前線程對象進入運行狀態,如果CPU調度其他線程對象,則當前線程對象回到就緒狀態。
    • 如果CPU在運行當前線程對象的時候調用了sleep方法\等待同步鎖,則當前線程對象就進入了阻塞狀態,等到sleep到時\得到同步鎖,則回到就緒狀態。
    • 如果CPU在運行當前線程對象的時候線程任務執行完畢\異常強制退出,則當前線程對象進入死亡狀態。
      ##多線程的安全隱患
      一塊資源可能會被多個線程共享,也就是多個線程可能會訪問同一塊資源,比如多個線程訪問同一個對象、同一個變量、同一個文件,當多個線程訪問同一塊資源時,很容易引發數據錯亂和數據安全問題.

    ##安全隱患解決
    互斥鎖

    互斥鎖使用格式:
    @synchronized(鎖對象) { // 需要鎖定的代碼 }
    注意:鎖定1份代碼只用1把鎖,用多把鎖是無效的
    互斥鎖的優缺點
    優點:能有效防止因多線程搶奪資源造成的數據安全問題
    缺點:需要消耗大量的CPU資源
    互斥鎖的使用前提:多條線程搶奪同一塊資源

    ##原子和非原子屬性

    OC在定義屬性時有nonatomic和atomic兩種選擇
    atomic:原子屬性,為setter方法加鎖(默認就是atomic)
    nonatomic:非原子屬性,不會為setter方法加鎖
    nonatomic和atomic對比
    atomic:線程安全,需要消耗大量的資源
    nonatomic:非線程安全,適合內存小的移動設備
    iOS開發的建議
    所有屬性都聲明為nonatomic
    盡量避免多線程搶奪同一塊資源
    盡量將加鎖、資源搶奪的業務邏輯交給服務器端處理,減小移動客戶端的壓力

    ##線程間通信

    什么叫做線程間通信
    在1個進程中,線程往往不是孤立存在的,多個線程之間需要經常進行通信
    線程間通信的體現
    1個線程傳遞數據給另1個線程
    在1個線程中執行完特定任務后,轉到另1個線程繼續執行任務
    線程間通信常用方法(NSObject)

    • (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
    • (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;
    面試相關: [iOS 網絡和多線程面試題01~有答案](https://blog.csdn.net/shihuboke/article/details/73385255) [iOS進階面試題----多線程](https://blog.csdn.net/xunyn/article/details/14525243) ************************ <font color=red size=3>iOS多線程相關文章:</font> [iOS多線程簡述](https://blog.csdn.net/Bolted_snail/article/details/79261779) [iOS多線程-pthread、NSThread](https://blog.csdn.net/Bolted_snail/article/details/79273323) [iOS多線程-GCD](https://blog.csdn.net/Bolted_snail/article/details/79624848) [ iOS多線程-NSOperation, NSOperationQueue](https://blog.csdn.net/Bolted_snail/article/details/79627991) [iOS多線程-RunLoop](https://blog.csdn.net/Bolted_snail/article/details/79803250) [OC單例模式詳解](https://blog.csdn.net/Bolted_snail/article/details/79230097)

    總結

    以上是生活随笔為你收集整理的iOS多线程简述的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。