《高性能iOS開發(fā)》--并發(fā)編程閱讀筆記

常用多線程創(chuàng)建管理方式對比:

? GCD

直接基于C語言的實現(xiàn),執(zhí)行速度最快,性能最好,只需關(guān)注操作,OS自動管理
? 抽象程度最高。
? 兩種隊列開箱即用:main 和 global。
? 可以創(chuàng)建更多的隊列(使用 dispatch_queue_create)。
? 可以請求獨占訪問(使用 dispatch_barrier_sync 和 dispatch_barrier_async)。
? 基于線程管理。
? 硬性限制創(chuàng)建 64 個線程。

? NSOperationQueue

對CGD 的封裝,使其更接近面向?qū)ο?,更易于理解和手動管?br> ? 無默認(rèn)隊列。
? 應(yīng)用管理自己創(chuàng)建的隊列。
? 隊列是優(yōu)先級隊列。
? 操作可以有不同的優(yōu)先級(使用 queuePriority 屬性)。
? 使用 cancel 消息可以取消操作。注意,cancel 僅僅是個標(biāo)記。如果操作已經(jīng)開始 執(zhí)行,則可能會繼續(xù)執(zhí)行下去。
? 可以等待某個操作執(zhí)行完畢(使用 waitUntilFinished 消息)。

? NSThread

蘋果自由線程管理方式,可控性最強(qiáng),但同時使用也較復(fù)雜
? 低級別構(gòu)造,最大化控制。
? 應(yīng)用創(chuàng)建并管理線程。
? 應(yīng)用創(chuàng)建并管理線程池。
? 應(yīng)用啟動線程。
? 線程可以擁有優(yōu)先級,操作系統(tǒng)會根據(jù)優(yōu)先級調(diào)度它們的執(zhí)行。
? 無直接 API 用于等待線程完成。需要使用互斥量(如 NSLock)和自定義代碼。

線程安全:

主要有兩種方案:
1:使多線程下的共享狀態(tài)(數(shù)據(jù))不可修改
2:保證多線程下的共享狀態(tài)(數(shù)據(jù))是線程安全的

高級別鎖

1:原子屬性 (atomic) 原子屬性是實現(xiàn)應(yīng)用狀態(tài)線程安全的一個良好開始。如果一個屬性是 atomic,則修改和讀取肯定都是原子的,默認(rèn)屬性 但存在一定開銷,要避免濫用。而且無法避免同線程情況下多操作同時間進(jìn)行的情況

2:互斥鎖(@synchronized(obj))指令@synchronized()通過對一段代碼的使用進(jìn)行加鎖。其他試圖執(zhí)行該段代碼的線程都會被阻塞,直到加鎖線程退出執(zhí)行該段被保護(hù)的代碼段,也就是說@synchronized()代碼塊中的最后一條語句已經(jīng)被執(zhí)行完畢的時候。
參數(shù) obj 為互斥鎖傳入臨界區(qū)的信號量即為需要加鎖的對象(一般為self),臨界區(qū)能保證永遠(yuǎn)只有一個線程執(zhí)行.Objective-C中的同步特性是支持遞歸的。一個線程是可以以遞歸的方式多次使用同一個信號量的;
其他的線程會被阻塞直到這個線程釋放了自己所有的和該信號量相關(guān)的鎖,也就是說通過正常執(zhí)行或者是通過異常處理的方式退出了所有的@synchronized()代碼塊。
@synchronized(self) {
}

低級別鎖

NSLock 這是一種低級別的鎖。一旦獲取了鎖,執(zhí)行則進(jìn)入臨界區(qū),且不會允許超過一個線程并 行執(zhí)行。釋放鎖則標(biāo)記著臨界區(qū)的結(jié)束。
1 將鎖聲明為一個私有字段,也可以用屬性來表示鎖。 ? 初始化鎖。
2 獲取鎖,進(jìn)入臨界區(qū)。
3 在臨界區(qū),任意時刻最多只允許一個線程執(zhí)行。
4 釋放鎖標(biāo)記著臨界區(qū)的結(jié)束。其他線程現(xiàn)在能夠獲取鎖了。 NSLock 必須在鎖定的線程中進(jìn)行解鎖。

NSCondition 有些情況需要協(xié)調(diào)線程之間的執(zhí)行。例如,一個線程可能需要等待其他線程返回結(jié)果。 NSCondition 可以原子性地釋放鎖,從而使得其他等待的線程可以獲取鎖,而初始的線 程繼續(xù)等待。
一個線程會等待釋放鎖的條件變量。另一個線程會通知條件變量釋放該鎖,并喚醒等待
中的線程。
lock :鎖定 wait:等待 signal:獲取信號(線程繼續(xù)) unlock:解鎖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容