當前位置:首頁 » 操作系統 » ios資料庫多線程

ios資料庫多線程

發布時間: 2024-09-15 15:16:27

A. ios 幾種多線程 區別

1 Thread
2 Cocoa operations
3 Grand Central Dispatch (GCD)

Thread 輕量級 最復雜 你需要自己管理thread的生命周期,線程之間的同步。線程共享同一應用程序的部分內存空間,它們擁有對數據相同的訪問許可權。你得協調多個線程對同一數據的訪問,一般做法是在訪問之前加鎖,這會導致一定的性能開銷。在 iOS 中我們可以使用多種形式的 thread:
Cocoa threads: 使用NSThread 或直接從 NSObject 的類方法 performSelectorInBackground:withObject: 來創建一個線程。如果你選擇thread來實現多線程,那麼 NSThread 就是官方推薦優先選用的方式。
POSIX threads: 基於 C 語言的一個多線程庫,

Cocoa operations是基於 Obective-C實現的,類 NSOperation 以面向對象的方式封裝了用戶需要執行的操作,我們只要聚焦於我們需要做的事情,而不必太操心線程的管理,同步等事情,因為NSOperation已經為我們封裝了這些事情。 NSOperation 是一個抽象基類,我們必須使用它的子類。iOS 提供了兩種默認實現:NSInvocationOperation 和 NSBlockOperation。

Grand Central Dispatch (GCD): iOS4 才開始支持,它提供了一些新的特性,以及運行庫來支持多核並行編程,它的關注點更高:如何在多個 cpu 上提升效率。

B. ios多線程中gcd的優勢及原理,線程池效率問題,何時需要取消線程任務

GCD

1.Apple提供的一套更底層、更高效的並發編程技術,純C語言、基於Block
2.支持同步或非同步任務處理,串列、並行的處理隊列,非系統調用的信號量機制,定時任務處理,進程、文件或網路的監聽任務等
優點

1.易用:GCD比之thread更簡單易用。基於block的特性導致它能極為簡單得在不同代
碼作用域之間傳遞上下文

2.效率:GCD實現功能 輕量、優雅,使得它在很多地方比之專門創建消耗資源的線程更
實用且快速

3.性能:GCD自動根據系統負載來增減線程數量,這就減少了上下文切換以及增加了計
算效率

4.安全:無需加鎖或其他同步機制

GCD內存管理

1.手動內存管理:dispatch_retain、dispatch_release
·dispatch函數名稱中含有『create』的API在不需要其生成的對象時,必須通過dispatch_release 函數進行釋放
2.ARC:iOS6之後GCD兼容ARC,不再需要用dispatch_retain或dispatch_release

C. IOS多線程安全(線程鎖)

線程的不安全是由於多線程訪問和修改共享資源而引起的不可預測的結果。
ios多線程開發中為保證線程的安全常用到的幾種鎖: NSLock dispatch_semaphore NSCondition NSRecursiveLock @synchronized

WEAKSELF typeof(self) __weak weakSelf = self;

NSLock 是OC層封裝底層線程操作來實現的一種鎖,繼承NSLocking協議。不能迭代加鎖,如果發生兩次lock,而未unlock過,則會產生死鎖問題。
以車站購票為例,多個窗口同時售票(同步),每個窗口有人循環購票:

原子操作
原子操作是指不可打斷的操作,也就是說線程在執行操作的過程中,不會被操作系統掛起,而是一定會執行完,
變數屬性Property中的原子定義
一般我們定義一個變數@property (nonatomic ,strong)NSLock *lock;nonatomic:非原子性,不會為setter方法加鎖,適合內存小的移動設備;atomic:原子性,默認為setter方法加鎖(默認就是atomic),線程安全。
PS: 在iOS開發過程中,一般都將屬性聲明為nonatomic,盡量避免多線程搶奪同一資源,盡量將加鎖等資源搶奪業務交給伺服器。

NSCondition常用於生產者-消費者模式,它繼承了NSLocking協議,同樣有lock和unlock方法。條件變數有點像信號量,提供了線程阻塞和信號機制,因此可以用來阻塞某個線程,並等待數據就緒再喚醒程序。

信號量主要有3個函數,分別是:

注意: 正常的使用順序是先降低然後提高,這兩個函數通常都是成對出現。

本文主要參考了這篇文章( https://www.cnblogs.com/crash-wu/p/4806499.html
),並對其中所能理解的部分進行一一驗證,以前沒怎麼寫過類似的,如果有什麼做的不好的地方還請大家多多見諒!

熱點內容
dhcp編程 發布:2024-11-24 19:41:33 瀏覽:828
如何檢測雲伺服器的性能 發布:2024-11-24 19:40:15 瀏覽:830
linux動態庫靜態編譯 發布:2024-11-24 19:38:24 瀏覽:291
為什麼編譯一直出錯 發布:2024-11-24 19:30:24 瀏覽:234
如何查看qq仙境電腦配置 發布:2024-11-24 19:30:14 瀏覽:625
怎麼用蘋果玩安卓賬號 發布:2024-11-24 19:29:34 瀏覽:157
2022款雅閣哪個配置全景天窗 發布:2024-11-24 19:25:48 瀏覽:841
64解壓縮軟體官方下載 發布:2024-11-24 19:23:35 瀏覽:523
php圖形庫 發布:2024-11-24 19:21:02 瀏覽:496
c語言遞歸演算法n 發布:2024-11-24 19:18:46 瀏覽:32