前言

不知道大家對(duì)throttle這個(gè)單詞是否看著眼熟,還是說(shuō)對(duì)這個(gè)計(jì)算機(jī)基礎(chǔ)概念有很清晰的了解了。今天就來(lái)聊聊和throttle相關(guān)的一些技術(shù)場(chǎng)景。
定義
我經(jīng)常有一種感覺(jué),對(duì)于英語(yǔ)這門(mén)語(yǔ)言的語(yǔ)感,會(huì)影響我們對(duì)于一些關(guān)鍵技術(shù)概念的理解。有時(shí)候在學(xué)習(xí)新技術(shù)知識(shí)的時(shí)候,我會(huì)先花一些時(shí)間去了解術(shù)語(yǔ)英文單詞的各種語(yǔ)義,在形成強(qiáng)烈清晰的語(yǔ)感之后,再去深入具體的技術(shù)語(yǔ)境。throttle也算是個(gè)生僻的單詞,至少在口語(yǔ)中畢竟少用到,先來(lái)看看詞義:
a device controlling the flow of fuel or power to an engine.
中文翻譯是節(jié)流器,一種控制流量的設(shè)備。對(duì)應(yīng)到我們計(jì)算機(jī)世界,可以理解成,一種控制數(shù)據(jù)或者事件流量大小的機(jī)制。這么說(shuō)可能還是有些抽象,再來(lái)看看一些具體的技術(shù)場(chǎng)景加深理解。
場(chǎng)景一:GCD Background Queue
話(huà)說(shuō)GCD幾乎是iOS面試的必問(wèn)題,也是個(gè)送分題:)。
我一般會(huì)機(jī)械式的先問(wèn):GCD有哪幾種Queue?回答:串行Queue和并行Queue。
我繼續(xù)問(wèn):Global Queue有哪幾種優(yōu)先級(jí)?回答:有幾種吧,大概記得Default,Low,High吧。
我雙眉一挑,進(jìn)一步試探:不知道少俠有沒(méi)有研究過(guò)DISPATCH_QUEUE_PRIORITY_BACKGROUND作何用?問(wèn)完立即豎起耳朵,殷殷期盼縈繞于心的關(guān)鍵字。如果能聽(tīng)到「I/O Throttle 呀!」,我會(huì)瞬間覺(jué)得面試氣氛被點(diǎn)亮了。
當(dāng)然啦,答不出I/O Throttle并不能說(shuō)明技術(shù)不扎實(shí),但能答出來(lái),至少表明對(duì)待技術(shù)是有好奇心的,加分!
官方文檔如是說(shuō):
Items dispatched to the queue run at background priority; the queue is scheduled for execution after all high priority queues have been scheduled and the system runs items on a thread whose priority is set for background status. Such a thread has the lowest priority and any disk I/O is throttled to minimize the impact on the system.
那Disk I/O Throttle做什么用呢?按照上面這段描述,Disk I/O會(huì)impact system performance。
理解Disk I/O的影響需要補(bǔ)充一些大學(xué)課本上的知識(shí)。一次磁盤(pán)讀寫(xiě)操作涉及到的硬件資源主要有兩個(gè),CPU和磁盤(pán)。任務(wù)本身由CPU觸發(fā)和調(diào)度,讀操作發(fā)生時(shí),CPU告知Disk去獲取某個(gè)地址的數(shù)據(jù),此時(shí)由于Disk的讀操作存在尋址延遲,CPU是處于I/O wait狀態(tài),一直維持到Disk返回?cái)?shù)據(jù)為止。處于I/O wait狀態(tài)的CPU,此時(shí)并不能把這部分等待的時(shí)間用來(lái)處理其他任務(wù),也就是說(shuō)這一段等待的CPU時(shí)間被“浪費(fèi)”了。而CPU是公共的系統(tǒng)資源,這部分資源的損耗自然會(huì)對(duì)系統(tǒng)的整體表現(xiàn)產(chǎn)生負(fù)面影響。即使Global Queue使用的是子線程,也會(huì)造成CPU資源的消耗。
如果把任務(wù)的Priority調(diào)整為DISPATCH_QUEUE_PRIORITY_BACKGROUND,那么這些任務(wù)中的I/O操作就被被控制,雖然具體的控制策略并沒(méi)有官方文檔描述(一種可能的策略是并發(fā)的Disk I/O變?yōu)榇械模覀兡艽_認(rèn)的是,部分I/O操作的啟動(dòng)時(shí)間很有可能被適當(dāng)延遲,把更多的CPU資源騰出來(lái)處理其他任務(wù)(比如說(shuō)一些系統(tǒng)資源的調(diào)度任務(wù)),這樣可以讓我們的系統(tǒng)更加穩(wěn)定高效。簡(jiǎn)而言之,對(duì)于重度磁盤(pán)I/O依賴(lài)的后臺(tái)任務(wù),如果對(duì)實(shí)時(shí)性要求不高,放到DISPATCH_QUEUE_PRIORITY_BACKGROUND Queue中是個(gè)好習(xí)慣,對(duì)系統(tǒng)更友好。
實(shí)際上I/O Throttle還分為好幾種,有Disk I/O Throttle,Memory I/O Throttle,和Network I/O Throttle。語(yǔ)義類(lèi)似只不過(guò)場(chǎng)景不同,繼續(xù)往下看。
場(chǎng)景二:ASIHttpRequest Network Throttle
早幾年讀ASIHttpRequest源碼的時(shí)候,讀到過(guò)一段有意思的代碼:
- (void)handleNetworkEvent:(CFStreamEventType)type
{
//...
[self performThrottling];
//...
}另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.jbt999.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)題目:iOS編程學(xué)習(xí)中關(guān)于throttle的那些事-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://www.jbt999.com/article18/ccdidp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、定制開(kāi)發(fā)、微信小程序、網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站導(dǎo)航、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容