999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

IOS系統(tǒng)中不同多線程技術(shù)的研究和比較

2014-04-29 22:02:01潘小龍
中國(guó)新通信 2014年24期

潘小龍

【摘要】 隨著蘋果手機(jī)在智能手機(jī)市場(chǎng)取得的成功,iOS系統(tǒng)也在被廣大用戶熟識(shí)和喜愛(ài),其內(nèi)部架構(gòu)設(shè)計(jì)也在被越來(lái)越多的技術(shù)開(kāi)發(fā)人員所剖析、研究和運(yùn)用。本文從多線程的相關(guān)概念出發(fā),對(duì)iOS系統(tǒng)中主流的三種多線程實(shí)現(xiàn)技術(shù)進(jìn)行了研究和分析,并通過(guò)分析比較,總結(jié)了三者之間的不同以及優(yōu)缺點(diǎn),將對(duì)相關(guān)系統(tǒng)開(kāi)發(fā)起到借鑒意義。

【關(guān)鍵詞】 iOS系統(tǒng) 多線程 NSThread GCD NSOperation

一、引言

從2007年第一代iPhone推出至今歷經(jīng)了六代的發(fā)展,蘋果手機(jī)已經(jīng)成為智能手機(jī)市場(chǎng)舉足輕重的一員,除去時(shí)尚的外表,卓越的性能和絕佳的用戶體驗(yàn)也是蘋果手機(jī)長(zhǎng)盛不衰的重要原因,而這正離不開(kāi)iOS系統(tǒng)中對(duì)多線程技術(shù)的設(shè)計(jì)和實(shí)現(xiàn)。

本文將以多線程概念為切入點(diǎn),對(duì)比分析三種主要的多線程技術(shù)并分析各自優(yōu)缺點(diǎn),最后給出了在實(shí)際開(kāi)發(fā)過(guò)程中應(yīng)側(cè)重采用哪種技術(shù)的建議。

二、多線程概述

2.1 進(jìn)程與線程

進(jìn)程是指正在運(yùn)行中的程序,它負(fù)責(zé)程序運(yùn)行時(shí)的內(nèi)存分配,每一個(gè)進(jìn)程都有自己獨(dú)立的虛擬內(nèi)存空間。

線程是進(jìn)程中一個(gè)獨(dú)立的控制單元,一個(gè)進(jìn)程中至少包含一條線程,即主線程,在程序運(yùn)行時(shí),可以將耗時(shí)的執(zhí)行路徑放在其他線程中執(zhí)行,線程不能被終結(jié),但是可以被暫停或者休眠。

2.2 多線程概念

多線程(multithreading),指的是在軟件或硬件上讓多個(gè)線程實(shí)現(xiàn)并發(fā)執(zhí)行的技術(shù)。一臺(tái)計(jì)算機(jī)具有多線程能力,再加上硬件的支持,因而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而使整體處理性能得到提升。具有這種能力的處理器包括對(duì)稱多處理機(jī)、多核心處理器以及芯片級(jí)多處理或同時(shí)多線程處理器。

2.3 iOS系統(tǒng)中的線程

在iOS系統(tǒng)程序啟動(dòng)中,創(chuàng)建好一個(gè)進(jìn)程的同時(shí),一個(gè)線程便開(kāi)始運(yùn)行,這個(gè)線程叫主線程。主線程在程序中的地位和其他線程不同,它是其他線程最終的父線程,且所有界面的顯示操作即UIKit的操作必須在主線程進(jìn)行。iOS每個(gè)進(jìn)程中可以開(kāi)啟多個(gè)線程,由操作系統(tǒng)分配短暫的時(shí)間片輪流使用CPU,由于CPU對(duì)每個(gè)時(shí)間片的處理速度非常快,因此,從用戶使用角度來(lái)看,任務(wù)是同時(shí)執(zhí)行的。

三、iOS系統(tǒng)中三種多線程技術(shù)研究

3.1 NSThread多線程實(shí)現(xiàn)

NSThread是iOS系統(tǒng)多線程實(shí)現(xiàn)技術(shù)里相對(duì)輕量級(jí)的,但也是使用起來(lái)需要開(kāi)發(fā)人員自己維護(hù)的:需要自己管理thread的生命周期,線程之間的同步等等問(wèn)題。當(dāng)不同線程需要共享同一應(yīng)用程序的部分內(nèi)存空間時(shí),它們擁有對(duì)數(shù)據(jù)相同的訪問(wèn)權(quán)限,這就需要開(kāi)發(fā)人員協(xié)調(diào)多個(gè)線程對(duì)同一數(shù)據(jù)的訪問(wèn),而這種協(xié)調(diào)操作會(huì)導(dǎo)致一定的性能開(kāi)銷。

NSThread的初始化有靜態(tài)和動(dòng)態(tài)兩種方法:

靜態(tài)實(shí)現(xiàn)方法:

+(void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;

動(dòng)態(tài)實(shí)現(xiàn)方法:

-(id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;

其中,selector:線程執(zhí)行的方法,這個(gè)selector最多只能接收一個(gè)參數(shù);target:selector消息發(fā)送的對(duì)象;argument: 傳給selector的唯一參數(shù),也可以是nil。

這兩種方式的區(qū)別是:前者在實(shí)現(xiàn)后就會(huì)立即創(chuàng)建一個(gè)線程來(lái)做事情;而后者雖然初始化完成,但是需要手動(dòng)調(diào)用start啟動(dòng)線程時(shí)才會(huì)真正去創(chuàng)建線程。

3.2 GCD多線程實(shí)現(xiàn)

GCD(Grand Central Dispatch),是基于C語(yǔ)言的底層API。GCD的基本概念就是dispatch queue。dispatch queue是一個(gè)對(duì)象,它可以接受任務(wù),并將任務(wù)以先到先執(zhí)行的順序來(lái)執(zhí)行。dispatch queue可以是并發(fā)的或串行的。并發(fā)任務(wù)會(huì)像NSOperationQueue那樣基于系統(tǒng)負(fù)載來(lái)合適地并發(fā)進(jìn)行,串行隊(duì)列同一時(shí)間只執(zhí)行單一任務(wù)。

GCD的基本思想就是將操作放在隊(duì)列中去執(zhí)行,要使用隊(duì)列,首先需要調(diào)用函數(shù)dispatch_queue_create進(jìn)行創(chuàng)建,隊(duì)列負(fù)責(zé)調(diào)度任務(wù)執(zhí)行所在的線程以及具體的執(zhí)行時(shí)間。其次向一個(gè)隊(duì)列提交操作,通過(guò)調(diào)用dispatch_async函數(shù),傳入一個(gè)隊(duì)列和一個(gè)操作。隊(duì)列會(huì)在輪到這個(gè)block執(zhí)行時(shí)執(zhí)行該操作。

GCD中有四種主要隊(duì)列:

串行隊(duì)列:同步操作不會(huì)新建線程,操作順序執(zhí)行;異步操作會(huì)新建線程,操作順序執(zhí)行。

并行隊(duì)列:同步操作不會(huì)新建線程,操作順序執(zhí)行;異步操作會(huì)新建多個(gè)線程,操作無(wú)序執(zhí)行,隊(duì)列前如果有其他任務(wù),會(huì)等待前面的任務(wù)完成之后再執(zhí)行。

全局隊(duì)列:全局隊(duì)列是系統(tǒng)的,直接GET即可,與并行隊(duì)列類似,但調(diào)試時(shí),無(wú)法確認(rèn)操作所在隊(duì)列。

主隊(duì)列:每一個(gè)應(yīng)用程序都對(duì)應(yīng)唯一的主隊(duì)列,直接GET即可,在多線程開(kāi)發(fā)中,使用主隊(duì)列更新UI。

總之,隊(duì)列不是線程,也不表示對(duì)應(yīng)的CPU,隊(duì)列就是負(fù)責(zé)調(diào)度的。多線程技術(shù)的目的,就是為了在一個(gè)CPU上實(shí)現(xiàn)快速切換。

3.3 NSOperation&NSOperationQueue多線程實(shí)現(xiàn)

NSOperation是GCD提供隊(duì)列模型的Cocoa抽象,是一套Objective-C的API,而NSOperationQueue(操作隊(duì)列)則在GCD之上實(shí)現(xiàn)了一些方便的功能,這些功能對(duì)開(kāi)發(fā)者而言通常是最好最安全的選擇。

NSOperationQueue與GCD相同,都是依靠隊(duì)列來(lái)完成多線程操作,它其中有兩種不同類型的隊(duì)列:運(yùn)行在主線程上的主隊(duì)列和在后臺(tái)執(zhí)行的自定義隊(duì)列。NSOperation是抽象的父類,要進(jìn)行隊(duì)列處理任務(wù)時(shí)都需要繼承實(shí)現(xiàn)其兩個(gè)子類:NSInvocationOperation和NSBlockOperation。

使用NSOperation實(shí)現(xiàn)多線程調(diào)度操作時(shí),同樣需要定義隊(duì)列,在定義完成之后需要定義要進(jìn)行的操作,最后把定義的操作加入到隊(duì)列中。

從本質(zhì)上看, NSOperationQueue操作隊(duì)列的性能會(huì)比GCD略低,不過(guò),大多數(shù)情況下這點(diǎn)負(fù)面影響可以忽略不計(jì),操作隊(duì)列是并發(fā)編程的首選工具。

四、三種多線程技術(shù)的總結(jié)比較

4.1 NSThread技術(shù)

優(yōu)點(diǎn):相對(duì)于其他兩種技術(shù),NSThread是最輕量級(jí)的,易于上手使用,適合iOS初學(xué)者使用。

缺點(diǎn):不能控制線程的數(shù)量以及執(zhí)行順序,開(kāi)發(fā)人員需要自己管理thread的生命周期,線程之間的同步等問(wèn)題,因此容易出現(xiàn)開(kāi)發(fā)漏洞。

4.2 GCD技術(shù)

優(yōu)點(diǎn):基于C語(yǔ)言的底層API封裝,因此在進(jìn)行多線程開(kāi)發(fā)時(shí)可以傳block,也可以傳c函數(shù)指針,用于多核編程,方便高效。所有的多線程代碼集中在一起,便于維護(hù),GCD中無(wú)需使用@autoreleasepool。

缺點(diǎn):對(duì)C語(yǔ)言陌生的開(kāi)發(fā)人員來(lái)說(shuō)理解可能存在一定困難,而且GCD一種輕量級(jí)的方法來(lái)實(shí)現(xiàn)多線程,控制起來(lái)比較麻煩,比如取消和暫停一個(gè)線程,以及在線程中不同操作之間的依賴關(guān)系。

4.3 NSOperation技術(shù)

優(yōu)點(diǎn):基于GCD的Object-C的封裝,與iOS開(kāi)發(fā)適應(yīng)性更強(qiáng),同時(shí)因其為面相對(duì)象封裝,所以在操作不同線程任務(wù)之間的依賴上更加方便,開(kāi)發(fā)人員不需要關(guān)心線程管理,數(shù)據(jù)同步的事情,可以把精力放在自己需要執(zhí)行的操作上。

缺點(diǎn):因?yàn)槭菍?duì)GCD的再一次封裝,在性能上較GCD略低。

五、結(jié)語(yǔ)

通過(guò)以上對(duì)iOS系統(tǒng)中三種主要多線程技術(shù)的研究和比較,可以得出,在實(shí)際開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員應(yīng)盡量避免采用輕量級(jí)的NSThread,而主要采用GCD與NSOperation實(shí)現(xiàn)多線程操作,這樣可以把更多的精力放在應(yīng)用程序自身的業(yè)務(wù)邏輯當(dāng)中。另外,隨著iOS系統(tǒng)的持續(xù)更新,開(kāi)發(fā)人員自身技術(shù)的不斷提高,相信在未來(lái)還會(huì)出現(xiàn)更好的多線程技術(shù)來(lái)推動(dòng)iOS系統(tǒng)的發(fā)展。

參 考 文 獻(xiàn)

[1]駱斌,費(fèi)翔林.多線程技術(shù)的研究與應(yīng)用[J].計(jì)算機(jī)研究與發(fā)展, 2000,(04):407-412.

[2]薩丹.iPhone開(kāi)發(fā)秘籍[M].北京:人民郵電出版社,2010:1.

[3]Gene Blacklin(美)著.岳紅 凌沖譯.iPhone&iPad高級(jí)編程[M].北京:清華大學(xué)出版社,2012:1.

[4]虞斌著.Ios軟件開(kāi)發(fā)解密[M].北京:電子工業(yè)出版社,2011:1.

[5]喬納森(美)著.AppStore掘金[M].北京:人民郵電出版社,2010:1.

主站蜘蛛池模板: 午夜成人在线视频| 国产精品久久久久久影院| 国产成人综合日韩精品无码首页 | 欧美国产日产一区二区| 欧美性天天| 日本午夜精品一本在线观看| 尤物成AV人片在线观看| 日韩精品无码免费一区二区三区| 日日噜噜夜夜狠狠视频| 久久精品无码一区二区日韩免费| 国产情侣一区二区三区| 素人激情视频福利| 国产波多野结衣中文在线播放| 国产女人在线观看| 国产日韩精品欧美一区灰| 日韩精品成人在线| 不卡午夜视频| 亚洲欧美另类久久久精品播放的| 亚洲视频在线观看免费视频| 日本精品一在线观看视频| 青青草一区二区免费精品| 久久伊人操| 欧美一区二区三区国产精品| 毛片手机在线看| 欧美一区日韩一区中文字幕页| 在线日本国产成人免费的| 日韩色图在线观看| 夜夜操国产| 欧美中文字幕在线视频| 国产欧美在线观看视频| 91久久大香线蕉| 欧美激情综合| 69综合网| 在线免费看片a| 伊人久久综在合线亚洲2019| 人人91人人澡人人妻人人爽| 成人在线欧美| 国产视频入口| 精品伊人久久久大香线蕉欧美| 亚洲精品视频网| 香蕉网久久| 国产成人精品一区二区三区| 亚洲无线一二三四区男男| 久久国语对白| 六月婷婷精品视频在线观看| 国产精品va| 精品亚洲国产成人AV| 午夜欧美理论2019理论| 一级黄色网站在线免费看| 欧美综合在线观看| 成人综合在线观看| 国产熟睡乱子伦视频网站| 99ri精品视频在线观看播放| 欧美精品黑人粗大| 日韩二区三区| 99热这里只有精品在线播放| 欧美另类图片视频无弹跳第一页| 国产精品va免费视频| 亚洲精品无码抽插日韩| 在线观看国产一区二区三区99| 久久综合五月| 一级一毛片a级毛片| 国产日韩丝袜一二三区| 亚洲中文久久精品无玛| 日韩欧美国产另类| 99在线观看精品视频| 精品一区二区无码av| 国产一区二区影院| 欧美日韩中文字幕在线| 亚洲第一在线播放| 波多野结衣一区二区三区AV| 国产一级无码不卡视频| 久久国产精品国产自线拍| 亚洲视频免费在线看| 久无码久无码av无码| 久久大香香蕉国产免费网站| 国产jizzjizz视频| 国内精品久久人妻无码大片高| 久久中文字幕2021精品| 色婷婷天天综合在线| 色精品视频| 日韩精品资源|