1.什么是GCD
? ? ? Grand Central Dispatch (GCD)是Apple開發(fā)的一個多核編程的解決方法晌缘。在iOS4.0開始之后才能使用。GCD是一個替代諸如NSThread, NSOperationQueue, NSInvocationOperation等技術(shù)的很高效和強(qiáng)大的技術(shù)【猎海現(xiàn)在的iOS系統(tǒng)都升級到7了鸡捐,所以不用擔(dān)心該技術(shù)不能使用即碗。
? ? ? 全稱是Grand Center Dispatch(CPU調(diào)度中心,調(diào)度的是任務(wù)和線程闹司,把任務(wù)交給線程執(zhí)行)。純C語言沐飘,提供了非常多游桩、強(qiáng)大的函數(shù)。
2.GCD的關(guān)鍵術(shù)語
串行耐朴、并行:所謂串行并行描述是相對而言的众弓,串行是指在同一時間只執(zhí)行一個任務(wù),并行是指在同一時間可能執(zhí)行多個任務(wù)隔箍。
同步、異步:在GCD中脚乡,同步異步是為了描述一個函數(shù)相對于該函數(shù)要求GCD執(zhí)行完成的另一個任務(wù)蜒滩。同步方法只在它完成它需要做的任務(wù)后才會返回。異步方法剛好和同步方法相反奶稠,它不會等待任務(wù)完成才返回俯艰,它會立即返回。所以異步不會阻塞當(dāng)前線程執(zhí)行另一個任務(wù)(方法\函數(shù))锌订。
死鎖:所謂的死鎖是指它們都卡住了竹握,并等待對方完成或執(zhí)行其它操作。第一個不能完成是因為它在等待第二個的完成辆飘。但第二個也不能完成啦辐,因為它在等待第一個的完成◎谙睿互相等待芹关,導(dǎo)致誰都完不成。
線程安全:線程安全的代碼在多線程或并發(fā)任務(wù)中被安全的調(diào)用紧卒,而不會導(dǎo)致任何問題(數(shù)據(jù)損壞侥衬、崩潰等)。比如說經(jīng)典案例:買票系統(tǒng)跑芳,銀行取錢就是這個意思轴总。
3.隊列和任務(wù)的幾種情況
同步、串行隊列:不開新線程博个,順序執(zhí)行
同步、并行隊列:不開新線程坡倔,順序執(zhí)行
異步脖含、串行:新開線程,順序(同步)執(zhí)行投蝉。
異步、并行:新開線程瘩缆,異步執(zhí)行
下面這個表就包含全了,一般的話用異步并行用的比較多庸娱。
4.關(guān)于GCD單例模式
單例模式的作用
? ? ? 可以保證在程序運(yùn)行過程着绊,一個類只有一個實例,而且該實例易于供外界訪問,從而方便地控制實例個數(shù)熟尉,并節(jié)約系統(tǒng)資源
單例模式的使用場合
? ? ? ?在整個應(yīng)用程序中归露,共享一份資源(這份資源只需要初始化1次)
附上代碼
dispatch_once不僅意味著代碼僅會被運(yùn)行一次,而且還是線程安全的斤儿,這就意味著你不需要使用諸如@synchronized之類的來防止使用多個線程或者隊列時不同步的問題剧包。還有一種寫法是用@synchronized,其實也是為了線程安全往果。
小結(jié)
好了疆液,先講這么多吧,全是基礎(chǔ)的陕贮,自己多琢磨一下堕油,以后把深層次的東西寫一下分享給大家。