iOS 多線程

GCD

NSOperation(NSNetWorking和圖片異步下載)

NSThread (常駐線程的實(shí)現(xiàn))

多線程與鎖(線程間同步和資源共享)

GCD

  • 同步/異步 和 串行/并發(fā)

  • dispatch_barrier_async

  • dispatch_group

  • GCD 同步/異步 和 串行/并發(fā)

  1. 同步串行

死鎖,原因

另一個(gè)例子:

  1. 同步并發(fā)

答案:12345

  1. 異步串行

  1. 異步并發(fā)

dispath_barrier_async()

  • 多讀單寫(xiě)怎么實(shí)現(xiàn)?
    讀者和讀者并發(fā)
    讀者和寫(xiě)者互斥
    寫(xiě)者和寫(xiě)者互斥

異步柵欄調(diào)用

  • dispatch_group
    使用GDC實(shí)現(xiàn)需求ABC并發(fā),并發(fā)執(zhí)行完成后執(zhí)行任務(wù)D
  1. 創(chuàng)建并發(fā)隊(duì)列
  2. 創(chuàng)建一個(gè)group,執(zhí)行在一組中
  3. dispatch_group_notify

NSOPeration

  • 特點(diǎn)
    可以添加以來(lái)(GCD和NSThread沒(méi)有)
    任務(wù)執(zhí)行狀態(tài)控制
    設(shè)置并發(fā)量的控制

  • 執(zhí)行狀態(tài)控制
    isReady
    isExcusing
    isFinished
    isCancelled

如重寫(xiě)main方法,底層控制。
如重寫(xiě)start方法,我們自行控制狀態(tài)。
源碼分析

系統(tǒng)是通過(guò)KVO來(lái)移除一個(gè)isFinished=YES的NSOperation的

NSThread

啟動(dòng)流程
start -> 創(chuàng)建Pthread -> main() -> perforSelector (runloop) -> exict()

  • start方法
    創(chuàng)建函數(shù),在main函數(shù)中創(chuàng)建一個(gè)for循環(huán),實(shí)現(xiàn)一個(gè)常駐的線程

  • @synchronized
  • atomic
  • NSSpinlock
  • NSRecursiveLock
  • NSLock
  • dispatch_semaphore_t
  • @synchronized
    一半是使用單利對(duì)象使用的
  • atomic
    修飾屬性和關(guān)鍵字
    原子性對(duì)復(fù)制操作有現(xiàn)成安全性

  • OSSpinLock自旋鎖
    循環(huán)等待詢問(wèn),不釋放當(dāng)前資源
    類似有個(gè)while循環(huán)

輕量級(jí)數(shù)據(jù)的訪問(wèn),簡(jiǎn)單的int值+1 -1操作,系統(tǒng)使用自旋鎖

  • NSLock

上鎖和解鎖成對(duì)出現(xiàn)

沖入原因死鎖,換成遞歸鎖:

  • NSRecursiveLock
    遞歸鎖

  • dispatch_semaphore_t
    信號(hào)量

dispatch_semaphore_creat
dispatch_semaphore_wait(信號(hào)量,時(shí)間)
dispatch_semaphore_signal(信號(hào)量)

多線程

怎么用GCD實(shí)現(xiàn)單讀多寫(xiě)?
幾種多線程計(jì)數(shù)的特點(diǎn)?
GCD簡(jiǎn)單的多線程,NSOparation的點(diǎn)在第三方中用,NSThread是實(shí)現(xiàn)一個(gè)常駐線程
NSOperation對(duì)象在FInished之后怎么存quene中移除掉的?(KVO)
你用過(guò)設(shè)么鎖?結(jié)合實(shí)際談?wù)勀阍趺词褂玫模?/p>

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

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

  • ? 前言:這可能是史上最全面的一篇iOS 多線程博客了(王婆賣瓜一番??),從多線程的基本概念,進(jìn)程的概念,引出i...
    阿餅six閱讀 886評(píng)論 2 11
  • iOS多線程編程 基本知識(shí) 1. 進(jìn)程(process) 進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序,就是一段程序的執(zhí)...
    陵無(wú)山閱讀 6,346評(píng)論 1 14
  • 一 iOS多線程介紹 二 線程同步方案 一 iOS多線程介紹 首先我們先了解一下關(guān)于線程的幾個(gè)概念: 1 什么是進(jìn)...
    當(dāng)前明月閱讀 657評(píng)論 0 2
  • iOS多線程實(shí)踐中,常用的就是子線程執(zhí)行耗時(shí)操作,然后回到主線程刷新UI。在iOS中每個(gè)進(jìn)程啟動(dòng)后都會(huì)建立一個(gè)主線...
    jackyshan閱讀 1,575評(píng)論 2 12
  • 多線程的基本概念 進(jìn)程:可以理解成一個(gè)運(yùn)行中的應(yīng)用程序,是系統(tǒng)進(jìn)行資源分配和調(diào)用的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ),...
    小白進(jìn)城閱讀 1,761評(píng)論 0 1

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