關(guān)于線程三種方式的比較

一、Thread
主要利用NSThread這個(gè)類,一個(gè)NSThread實(shí)例代表著一條線程
1、優(yōu)點(diǎn):NSThread比其他兩種多線程方案較輕量級(jí),更直觀地控制線程 對(duì)象
2、缺點(diǎn):需要自己管理線程的生命周期,線程同步。線程同步對(duì)數(shù)據(jù)的枷鎖會(huì)有一定的系統(tǒng)開銷
二、GCD
Grand Central Dispatch(GCD)是Apple開發(fā)的一個(gè)多核編程的較新的解決方案。它主要用于優(yōu)化應(yīng)用程序以支持多核處理器以及其他 對(duì)稱多處理 系統(tǒng)。它是一個(gè)在線程池模式的基礎(chǔ)上執(zhí)行的并行任務(wù)。在MAC OS X10.6雪豹中首次推出,也可在IOS4及以上版本使用
GCD是一個(gè)提到注冊(cè)NSTread等技術(shù)的很搞笑和強(qiáng)大的技術(shù)。GCD完全可以處理諸如數(shù)據(jù)多訂和資源泄漏等復(fù)雜的異步編程問題。GCD的工作原理是讓一個(gè)程序,根據(jù)可用的處理資源,安排他們?cè)谌魏慰捎玫奶幚砥骱诵纳吓抨?duì)執(zhí)行特定的任務(wù),這個(gè)任務(wù)可以是一個(gè)功能或者一個(gè)程序段。
GCD的多有的調(diào)度隊(duì)列都是先進(jìn)先出隊(duì)列,因此,隊(duì)列中的任務(wù)的開始順序和添加到隊(duì)列的中的順序相同。我們可以將部分獨(dú)立運(yùn)行的任務(wù)添加隊(duì)列,由系統(tǒng)管理執(zhí)行.
GCD隊(duì)列主要有三種,系統(tǒng)主隊(duì)列main_queue、全局并發(fā)隊(duì)列g(shù)lobal_queue和自定義隊(duì)列

并行對(duì)壘
1、同步并行隊(duì)列:隊(duì)列的執(zhí)行任務(wù)與主線程是同步的,會(huì)阻塞主線程。
2、異步并行隊(duì)列:隊(duì)列的執(zhí)行任務(wù)與主線程是異步的。
串行隊(duì)列:隊(duì)列中的任務(wù)必須在前一個(gè)任務(wù)結(jié)束后才能執(zhí)行
1、同步并行隊(duì)列:隊(duì)列的執(zhí)行任務(wù)與主線程是同步的會(huì)阻塞主線程
2、異步串行隊(duì)列:隊(duì)列的執(zhí)行任務(wù)與主線程是異步的

三、NSOperation
NSOperation實(shí)例封裝了需要執(zhí)行的操作和執(zhí)行操作所需的數(shù)據(jù),并且能夠以并發(fā)或非并發(fā)的方式執(zhí)行這個(gè)操作。
NSOperation本身是抽象積累,因此必須使用它的子類,使用NSOperation子類的方式有兩種:
1>自定義 Foundation框架提供了兩個(gè)具體的子類直接供我們使用:NSInvocationOperation和NSblockoperation
2>自定義子類繼承NSOperation實(shí)現(xiàn)內(nèi)部相應(yīng)的方法
NSOperation調(diào)用start方法即可開始執(zhí)行操作,NSOperation對(duì)象默認(rèn)按同步方式執(zhí)行,也就是在調(diào)用start方法的那那個(gè)線程中直接執(zhí)行。
一個(gè)NSOperation對(duì)象可以通過代用start方法來執(zhí)行任務(wù),默認(rèn)任務(wù)是同步執(zhí)行的。也可以將NSOpeartion添加到一個(gè)NSOeration添加到一個(gè)NSOperationQueue(操作隊(duì)列)中去執(zhí)行,而且是異步執(zhí)行的。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 原文:http://www.cocoachina.com/ios/20170707/19769.html 本文主要...
    冬的天閱讀 2,420評(píng)論 0 12
  • 從哪說起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個(gè)最簡(jiǎn)單的問題,以這個(gè)作為切入點(diǎn)好了 在ma...
    Mr_Baymax閱讀 2,912評(píng)論 1 17
  • Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼,方法是什么?如果想延時(shí)執(zhí)行代碼、方法又是什么? 1...
    AlanGe閱讀 1,920評(píng)論 0 17
  • 多線程 在iOS開發(fā)中為提高程序的運(yùn)行效率會(huì)將比較耗時(shí)的操作放在子線程中執(zhí)行,iOS系統(tǒng)進(jìn)程默認(rèn)啟動(dòng)一個(gè)主線程,用...
    郭豪豪閱讀 2,721評(píng)論 0 4
  • 目錄 一、基本概念1.多線程2.串行和并行, 并發(fā)3.隊(duì)列與任務(wù)4.同步與異步5.線程狀態(tài)6.多線程方案 二、GC...
    BohrIsLay閱讀 1,700評(píng)論 5 12

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