欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

包含Windows安卓子系統(tǒng)卡頓的詞條

求助,Win11安裝安卓子系統(tǒng)之后重啟就一直在啟動(dòng)修復(fù)循環(huán)了,怎么辦怎么辦?

這種情況,直接選擇自動(dòng)修復(fù),看電腦系統(tǒng)能否自動(dòng)修復(fù)問題。

在洛扎等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),洛扎網(wǎng)站建設(shè)費(fèi)用合理。

如果重啟再次進(jìn)入該界面,說明修復(fù)失敗,直接選擇正常啟動(dòng),有時(shí)候也可以正常啟動(dòng),反正我是遇到過多次,估計(jì)是系統(tǒng)誤判。

如果仍然無法啟動(dòng),送修理店重裝系統(tǒng)吧,肯定可以解決。

安卓子系統(tǒng)網(wǎng)絡(luò)速度慢怎么辦?

多人都在抱怨安卓智能手機(jī)電池使用時(shí)間短,反應(yīng)速度慢,上網(wǎng)速度慢。怎么辦呢?不難!你可以試試下面的辦法。先在你的手機(jī)系統(tǒng)文件里找到build.prop這個(gè)文件,這個(gè)文件在system文件夾下面。找到以后,打開,然后你可以把下面的你想使用的代碼復(fù)制到build.prop文件下面,保存,推出。重啟兩次就OK了。

延遲電池使用壽命

ro.ril.disable.power.collapse=0 這個(gè)設(shè)置可以讓你的手機(jī)在待機(jī)狀態(tài)的時(shí)候,更深的睡眠。這可能會(huì)提高電池使用時(shí)間。

pm.sleep_mode=1 這個(gè)會(huì)使你的手機(jī)在待機(jī)的時(shí)候關(guān)閉電源。

wifi.supplicant_scan_interval=180 這個(gè)會(huì)使你的手機(jī)不在非常頻繁的掃描WiFi信號(hào),這也會(huì)節(jié)省一些電量。

加快手機(jī)反應(yīng)速度

debug.performance.tuning=1 這個(gè)設(shè)置可以加快觸屏的反應(yīng)速度

video.accelerate.hw=1 加快觸屏的反應(yīng)速度

windowsmgr.max_events_per_sec=150 加快滑動(dòng)反應(yīng)速度

加快上網(wǎng)速度的設(shè)置:

net.tcp.buffersize.default=4096,87380,256960,4096, 16384,256960

net.tcp.buffersize.wifi=4096,87380,256960,4096,163 84,256960

net.tcp.buffersize.umts=4096,87380,256960,4096,163 84,256960

net.tcp.buffersize.gprs=4096,87380,256960,4096,163 84,256960

net.tcp.buffersize.edge=4096,87380,256960,4096,163 84,256960

深度解析安卓(Android)為什么會(huì)比蘋果(iOS)卡頓 附解決方法

一般用過這兩種操作系統(tǒng)的朋友一定會(huì)感覺到 Android比iOS卡頓好幾倍 可是為什么呢? 安卓真的有那么爛嗎?下面 我就給大家解釋下 為什么安卓會(huì)比iOS卡頓 及解決方法

先來說原因之一(共仨) 就是因?yàn)閕OS鎖住了應(yīng)用的后臺(tái) 阻止其后臺(tái)運(yùn)行 但這是時(shí)候就有人問了 那為什么安卓在多任務(wù)管理器里清除后臺(tái)應(yīng)用沒有用呢?因?yàn)榘沧吭谌蝿?wù)管理器中清理掉后 某些流氓應(yīng)用就又會(huì)自動(dòng)運(yùn)行 或者被其他應(yīng)用喚醒 所以就算你劃掉了 一些應(yīng)用就又會(huì)重啟 自然沒有用 那安卓結(jié)束后臺(tái)后就收不到其推送的消息了 比如QQ 比較吃運(yùn)行內(nèi)存 如果清除掉 有消息便收不到了

那為什么蘋果可以在清掉后臺(tái)的情況下保留消息推送呢? 下面就來解釋下 用過iOS的朋友 如果你細(xì)心 就會(huì)發(fā)現(xiàn)每當(dāng)iOS安裝一個(gè)新應(yīng)用并打開時(shí) 會(huì)出現(xiàn)一個(gè)提示 大概內(nèi)容就是詢問你是否接收這個(gè)應(yīng)用推送的消息通知 而現(xiàn)在 如果你選擇了"是" 那么你的設(shè)備ID和這個(gè)APP的ID便會(huì)一同寫入到蘋果的云端服務(wù)器 而當(dāng)這個(gè)應(yīng)用發(fā)送推送消息時(shí) 不會(huì)發(fā)送到你手機(jī)上 而是發(fā)送到蘋果的云端服務(wù)器上 再由蘋果的服務(wù)器發(fā)送給你 這樣 就算任務(wù)的后臺(tái)被結(jié)束 也仍然能收到消息 且手機(jī)后臺(tái)只需運(yùn)行一個(gè)蘋果服務(wù)器的消息接受端就可以了 這就是為什么iPhone5s的1g運(yùn)行內(nèi)存也可以運(yùn)行如飛的原因 而國產(chǎn)2/3g運(yùn)行內(nèi)存仍有點(diǎn)吃力

再來說第二個(gè)原因 是因?yàn)閕OS的"資源優(yōu)先分配機(jī)制" 先來說iOS的應(yīng)用打開方式 當(dāng)你在iOS中點(diǎn)擊一個(gè)應(yīng)用時(shí) 它會(huì)第一時(shí)間跳出來 然后再準(zhǔn)備其他的工作 這就是為什么iOS打開應(yīng)用后還要等待比安卓長(zhǎng)那么一點(diǎn)的時(shí)間 且在跳出來到準(zhǔn)備的這個(gè)過程中 系統(tǒng)會(huì)先停下其他的活 將處理器及運(yùn)行內(nèi)存分配給這個(gè)過程 而安卓呢 則是平均分配cpu和ram 再來說安卓應(yīng)用打開方式 安卓是先給你將什么的都準(zhǔn)備好 再打開應(yīng)用 因此你可以發(fā)現(xiàn)安卓打開應(yīng)用后需要到等待的時(shí)間并不多 但是在你觸摸屏幕的第一時(shí)間并不會(huì)太快的反饋 這也是導(dǎo)致用戶感覺安卓卡頓的原因之一

再來說最后一個(gè)原因 過渡動(dòng)畫 如果你細(xì)心點(diǎn)的話 你會(huì)發(fā)現(xiàn) 雖然安卓在4.2版本后改進(jìn)了動(dòng)畫 但仍比較生硬 而iOS在屏幕解鎖 應(yīng)用打開 和應(yīng)用內(nèi)動(dòng)畫做的略微夸張 流暢 舒緩讓人感覺更快一些 但其實(shí)iOS與安卓的應(yīng)用打開速度差的并不是很大

好了 原因說完了 總結(jié)下iOS流暢的原因

一、后臺(tái)應(yīng)用限制與云端推送服務(wù)

二、資源優(yōu)先分配機(jī)制

三、過渡動(dòng)畫的優(yōu)化

原因總結(jié)過后 再來說說安卓卡頓的解決方法 其實(shí)很簡(jiǎn)單 鎖后臺(tái) 但是我之前提到了 任務(wù)管理器相當(dāng)于一個(gè)擺設(shè) 所以我們要借助第三方工具來結(jié)束后臺(tái) 我推薦的一共有三個(gè)

一、綠色守護(hù)(root后使用更佳)

二、黑域(無法root用戶的福音)

三、阻止運(yùn)行(需xposed)

用了這幾個(gè)后 你的安卓是不是飛了起來? 如果要是還沒飛 那就還剩倆原因了

一、手機(jī)配置有(ruo)點(diǎn)(bao)差(le)

二、系統(tǒng)優(yōu)化不到位 或者說優(yōu)化不適合你的手機(jī) 本人推薦小米的MIUI〈目前我使用〉或者華為的EMUI (不推薦低配機(jī)型)

好了 關(guān)于Android比iOS卡頓的問題解析就到這兒了 我是Jammy

安卓系統(tǒng)卡的原因

首先來說,安卓手機(jī)最直接的原因還是由于手機(jī)內(nèi)存不足導(dǎo)致的,因?yàn)榘沧肯到y(tǒng)本身就非常耗費(fèi)內(nèi)存資源,一開機(jī)系統(tǒng)就會(huì)占用很大一部分內(nèi)存,再加上開幾個(gè)軟件后,所剩內(nèi)存也沒有多少了,手機(jī)如果使用起來也會(huì)變得卡頓。所以我們也能看到很多安卓手機(jī)廠商都在加大運(yùn)行內(nèi)存,從之前的256MB逐漸上升到目前10GB,可以說安卓手機(jī)在內(nèi)存上比有的電腦內(nèi)存都大了。那么想要手機(jī)不卡可以選擇內(nèi)存大的手機(jī),還有時(shí)常清理后臺(tái)應(yīng)用程序來增加可用內(nèi)存。

還有一個(gè)原因也跟內(nèi)存有關(guān),那就是我們?cè)谑褂檬謾C(jī)的過程中軟件會(huì)產(chǎn)生很多垃圾緩存文件,還有每次系統(tǒng)更新時(shí)也會(huì)讓手機(jī)系統(tǒng)變得臃腫,很多時(shí)候用戶都是更新系統(tǒng)后立馬重置手機(jī)才可以讓手機(jī)變得流暢些。對(duì)于這種情況我們就要做到時(shí)常清理手機(jī)垃圾文件,一般來說安卓手機(jī)中都有管家之類的軟件,我們就可以通過里面的清理功能來清除垃圾文件。

最后還有一個(gè)重要的原因那就是手機(jī)處理器配置,高端處理器性能好手機(jī)當(dāng)然很少會(huì)出現(xiàn)卡頓的情況,而處理器太過于低端,一開始用起來就不怎么流暢,那么隨著手機(jī)使用時(shí)間越長(zhǎng),手機(jī)變得越來越卡頓也是情理之中的。因此,我們?cè)谶x購手機(jī)的時(shí)候盡量要選擇高配置處理器的手機(jī),至少手機(jī)的性能有所保證。

安卓系統(tǒng)卡頓的原因

現(xiàn)在移動(dòng)設(shè)備的流行,很多人發(fā)現(xiàn)有些APP在IOS系統(tǒng)比在安卓系統(tǒng)上流暢,根據(jù)這一問題大家展開了激烈的討論,IOS系統(tǒng)的嚴(yán)謹(jǐn)性自不用說,這篇文章總結(jié)了一些安卓卡頓的原因!

首先,根據(jù)所說的問題,我用iPad和小米Pad對(duì)比了,直觀感受上明顯感覺iOS要流暢、舒服。

在這件事情上,作為開發(fā)者的我認(rèn)為主要有以下三個(gè)原因:

速度曲線。

當(dāng)你滑動(dòng)界面然后松手,這時(shí)界面會(huì)繼續(xù)滑動(dòng),然后速度減小,直到速度為0時(shí)停止。iOS下速度減小的這個(gè)過程比較慢,尤其是快要停的時(shí)候是慢慢停的,視覺上有種很順滑的感覺;Android下則從松手到停要快很多,相比之下有種戛然而止的感覺。

從數(shù)據(jù)/技術(shù)角度來看這個(gè)事情,我們滑動(dòng)界面的最終目的不是為了“動(dòng)”,而是為了“停”,因此只要平滑的到達(dá)目的地,似乎越快完成這個(gè)過程越好,所以Android的選擇是理所當(dāng)然的。但事實(shí)是,大家普遍更喜歡iOS的方式,這樣做顯得更順滑、更優(yōu)雅。

幀率。

絕大部分時(shí)間兩者都能保持60FPS左右的滿幀率。但都會(huì)有偶爾的掉幀。并且Android上要比iOS上嚴(yán)重很多。(好吧,比起前兩年,已經(jīng)好太多了。)我前前后后滑動(dòng)了幾十次,iOS在前面遇到1次掉幀,后面就很穩(wěn)定了。而Android幾乎每滑動(dòng)一次都會(huì)伴隨一次掉幀。這完全就是真真實(shí)實(shí)的卡頓,用戶必然會(huì)感覺到那一刻的不流暢。Android掉幀的原因我后面再詳細(xì)分析。

觸摸響應(yīng)速度。

從手指碰到觸摸屏,到屏幕上顯示處理這次觸摸產(chǎn)生的畫面,是需要時(shí)間的。時(shí)間越短感覺越跟手。據(jù)說iOS的觸摸屏的處理時(shí)間要比一般的Android手機(jī)快,這不是我的專長(zhǎng),不知道怎么驗(yàn)證。但在軟件系統(tǒng)層面,Android的顯示機(jī)制是APP--SurfaceFlinger--Display,這比傳統(tǒng)的APP--Display多了一步,主要基于這個(gè)原因,畫面最終輸出到屏幕要比傳統(tǒng)的方式慢一幀(16.7ms)。

以上是個(gè)人分析的內(nèi)容,如果有不對(duì)的地方,還請(qǐng)大家指正。作為APP開發(fā)者,系統(tǒng)的問題我們無可奈何,我們只有在APP的性能上下功夫,給用戶一個(gè)好的體驗(yàn)。首先我們要做的就是預(yù)防,如何有效的進(jìn)行預(yù)防?如何才能實(shí)時(shí)的檢測(cè)卡頓現(xiàn)象的發(fā)生呢?就這一問題思考了很長(zhǎng)時(shí)間,于是使用友盟+u-apm性能監(jiān)測(cè)工具,這一工具在APP卡頓中起到哪些作用呢?

u-apm卡頓分析分析功能支持,卡頓趨勢(shì)的查找、卡頓列表的篩選、卡頓模塊的計(jì)算、卡頓分布的篩選、卡頓詳情頁面的展示,以上業(yè)務(wù)模塊u-apm平臺(tái)都以圖表的形式直觀的展示了實(shí)時(shí)數(shù)據(jù),輔助開發(fā)者進(jìn)行問題篩查。

卡頓分析功能可支持Android和iOS采集,Android支持5%采樣率,iOS支持全量采集。提供卡頓趨勢(shì)分析、卡頓列表及卡頓詳情日志、支持分系統(tǒng)版本、運(yùn)營商、APP版本、設(shè)備等6個(gè)緯度的查看卡頓分布;我們抽象了發(fā)生卡頓問題的堆棧信息構(gòu)成卡頓模塊,可通過倒序/正序聚合查看發(fā)現(xiàn)影響性能的最底層方法/核心原因。通過智能告警的方式推送到企業(yè)線上辦公工具或郵件能力,便于團(tuán)隊(duì)內(nèi)快速響應(yīng)跟進(jìn)問題。

總結(jié)

如今,事事都追求效率,快速,如果使用傳統(tǒng)的檢測(cè)方法,不僅耗費(fèi)大量的時(shí)間不說,還會(huì)消耗大量的經(jīng)費(fèi),u-apm的誕生,不僅能幫助開發(fā)者檢測(cè)卡頓問題,還能檢監(jiān)測(cè)線上卡頓的產(chǎn)生,從而預(yù)防性能問題的發(fā)生。

為什么Windows/iOS操作很流暢,而Linux/Android卻很卡頓呢?

先說是不是,再問為什么。

我就知道有人會(huì)這么說,然而那樣就成了一篇議論文了,而我只是想寫一篇隨筆。所以,不管事實(shí)是不是那樣,反正我就是覺得Windows,MacOS,iOS都很流暢,而Linux,Android卻很卡。當(dāng)然了,這里說的是GUI,如果考量點(diǎn)換成是Web服務(wù)的吞吐和時(shí)延,那估計(jì)結(jié)論要反過來了,不過那是客戶端程序感覺到的事,作為人,who cares!

我寫這篇文章還有一個(gè)意思,那就是想牽引一個(gè)話題,如果我們想把Linux,Android(當(dāng)然,Android內(nèi)核也是Linux)優(yōu)化到GUI不再卡頓,我們應(yīng)該怎么做。

大概是去年,一個(gè)炎熱的午后,吃過午飯我和同事們?cè)诠靖浇斡疲陀懻?“為什么蘋果手機(jī)就不卡,安卓手機(jī)不管多貴都很卡。” 記得一位同事說,iOS在GUI方面做了很多的優(yōu)化,而Android卻沒有。

這話說對(duì)了!不過更為重要的一點(diǎn)是, 不談具體場(chǎng)景談優(yōu)化,都是瞎折騰!

Windows也好,iOS也好,都知道自己的應(yīng)用場(chǎng)景,因此針對(duì)自己的應(yīng)用場(chǎng)景做了優(yōu)化之后,妥妥在自己拿手的場(chǎng)景下甩Linux在該場(chǎng)景下的表現(xiàn)幾條街了。

下面開始正式的技術(shù)層面的分析之前,先聲明幾點(diǎn):

1.本文并不是在說Linux系統(tǒng)總體上很卡頓,而只是說Linux系統(tǒng)桌面版的GUI程序相比Winddows很卡頓,如果真覺得本文是在噴Linux,那就當(dāng)是噴Linux桌面的吧。

2.本文不準(zhǔn)備討論X window和Windows窗口子系統(tǒng)一個(gè)在用戶態(tài)一個(gè)在內(nèi)核之間的差異,這無關(guān)緊要。我的想法是,即便是你將X window扔進(jìn)內(nèi)核,現(xiàn)有的Linux內(nèi)核處理GUI,該卡頓還是卡頓。

3.本文僅從調(diào)度算法的角度來評(píng)價(jià)為什么Windows/iOS不卡頓而Linux卻卡頓,當(dāng)然還有別的視角,但并不是本文主題。

4.Windows內(nèi)核調(diào)度的線程而不是進(jìn)程,但是本文統(tǒng)一采用進(jìn)程這個(gè)術(shù)語,沒有別的原因,只是因?yàn)檫M(jìn)程的概念是和現(xiàn)代操作系統(tǒng)概念相始終的,而線程是后來的概念。

先看服務(wù)對(duì)象

# 僅此就將Windows,MacOS/iOS和Linux的使用場(chǎng)景區(qū)分開來:

* Windows/MacOS/iOS系統(tǒng),主要是被人操作,用來提供寫文檔,游戲,做報(bào)表,畫圖,上網(wǎng)瀏覽,視頻播放等服務(wù)。

* Linux系統(tǒng),主要提供網(wǎng)絡(luò)服務(wù),用來支撐各種遠(yuǎn)程的客戶端,為其提供數(shù)據(jù)處理和查詢,數(shù)據(jù)生成,數(shù)據(jù)存儲(chǔ)等服務(wù)。

事實(shí)證明,Linux在其專業(yè)的領(lǐng)域已經(jīng)做的足夠好,但是問題是,為什么它在GUI處理方面卻總是一直很糟糕呢?這就要看具體場(chǎng)景的差異了。

對(duì)于網(wǎng)絡(luò)服務(wù)而言,其場(chǎng)景的行為是 可預(yù)期的 ,我們可以將這些場(chǎng)景簡(jiǎn)單歸結(jié)為:

* 公平快速處理網(wǎng)絡(luò)并發(fā)請(qǐng)求。

* 公平快速處理并發(fā)磁盤IO。

* 高吞吐CPU密集型數(shù)據(jù)處理與計(jì)算。

Linux優(yōu)秀的O(1) O(1)O(1)調(diào)度器以及后來的CFS調(diào)度器可以非常完美的cover上述三個(gè)場(chǎng)景,至于說為什么,不必多說,簡(jiǎn)單歸納如下:

* 無論是O(1) O(1)O(1)的基于優(yōu)先級(jí)的時(shí)間片輪轉(zhuǎn)還是CFS的基于權(quán)重的時(shí)間配額,均可以既滿足優(yōu)先級(jí)的差別服務(wù)需求又保證高吞吐率,這些都來自于調(diào)度器本身而不是依靠頻繁的切換。

* 額外的簡(jiǎn)單啟發(fā)式獎(jiǎng)懲機(jī)制可以讓網(wǎng)絡(luò)IO以及磁盤IO的響應(yīng)度更高,同時(shí)又不影響CPU密集型計(jì)算服務(wù)的高吞吐。

上面的第二點(diǎn)是一個(gè)額外的輔助,照顧IO過程快速獲得響應(yīng),這是一個(gè)非常棒的輔助,但是注意,再棒的啟發(fā)式算法也總是輔助性的,提高響應(yīng)度就是個(gè)輔助性的錦上添花的功能,以高吞吐為目標(biāo)才是根本。

IO過程對(duì)于一臺(tái)Linux服務(wù)器而言是與外界交互的唯一渠道,通過該渠道可以將處理好的數(shù)據(jù)送出到網(wǎng)絡(luò)或者磁盤,同時(shí)從網(wǎng)絡(luò)或者磁盤獲取新的數(shù)據(jù),換句話說, IO過程類似一道門。 但也僅僅是一道門。

照顧IO過程獲得高響應(yīng)度這件事是為了讓門開得更大,通行效率更高!

熟悉Linux內(nèi)核調(diào)度器變遷的都應(yīng)該知道O(1) O(1)O(1)到CFS過渡的這段歷史,即2.6.0內(nèi)核開始一直到2.6.22為止的這些版本,采用Linux內(nèi)核劃時(shí)代的O(1) O(1)O(1)調(diào)度器,隨后由于兩個(gè)原因:

1、O(1) O(1)O(1)調(diào)度器動(dòng)態(tài)范圍太大或者太小。

2、IO補(bǔ)償機(jī)制不到位,時(shí)間片分配不公平。

為了解決這些問題,Linux內(nèi)核切換到了CFS調(diào)度器。

切換到了CFS調(diào)度器,事實(shí)上,人們更多指望的是CFS能夠讓進(jìn)程時(shí)間片分配更加公平,多個(gè)進(jìn)程運(yùn)行更加平滑,如此一來,上GUI界面的話,豈不是就不卡頓了。

然而還是卡頓,本質(zhì)原因是,場(chǎng)景根本就不對(duì)路子。

在Linux服務(wù)器的場(chǎng)景中,優(yōu)先級(jí)和時(shí)間片是正相關(guān)的,無論是O(1) O(1)O(1)調(diào)度器的靜態(tài)線性映射的時(shí)間片,還是CFS的動(dòng)態(tài)時(shí)間配額,都是優(yōu)先級(jí)越高的進(jìn)程其每次運(yùn)行的時(shí)間也就越久,但是實(shí)際上,這兩者并不是一回事。

在更復(fù)雜的場(chǎng)景中,正確的做法應(yīng)該是參考 時(shí)間管理的四象限法則 來設(shè)計(jì)進(jìn)程調(diào)度器。其中:

* 優(yōu)先級(jí)表示緊急性。

* 時(shí)間片表示重要性。

于是,如果不是因?yàn)長(zhǎng)inux服務(wù)器場(chǎng)景過于單一簡(jiǎn)單,CPU的時(shí)間管理要復(fù)雜得多,比如調(diào)度器應(yīng)該按照四象限法則設(shè)計(jì)成下面的樣子:

1、處理重要且緊急事件的進(jìn)程,需要賦予高優(yōu)先級(jí)分配長(zhǎng)時(shí)間片去搶占當(dāng)前進(jìn)程。

2、處理重要但是不緊急事件的進(jìn)程,保持固有優(yōu)先級(jí)分配長(zhǎng)時(shí)間片就緒等待。

3、處理不重要但緊急事件的進(jìn)程,提升優(yōu)先級(jí)但不分配長(zhǎng)時(shí)間片,處理完畢立即返回固有優(yōu)先級(jí)。

4、既不重要也不緊急的后臺(tái)進(jìn)程,低優(yōu)先級(jí)短時(shí)間片,系統(tǒng)閑了再調(diào)度。

后面我們會(huì)看到,Windows的調(diào)度器就是這般設(shè)計(jì)的。

我們先總體看看GUI系統(tǒng)的場(chǎng)景。

它的服務(wù)對(duì)象是人,和Linux的服務(wù)場(chǎng)景的行為可預(yù)期相反,人的操作是 不可預(yù)期 的!

Windows,MacOS/iOS這種Desktop系統(tǒng)的GUI進(jìn)程,很多時(shí)候都是在等待人的進(jìn)一步操作而睡眠,要么在等鼠標(biāo),要么在等鍵盤,要么在等聲卡,顯卡的輸出,或者就是在將用戶輸入的信息往磁盤里寫而等待IO完成,Desktop系統(tǒng)更多關(guān)注的是要對(duì)以上這些事件提供高效率的響應(yīng)服務(wù),而不是系統(tǒng)的數(shù)據(jù)吞吐。

Desktop在乎的是時(shí)延,而不是總吞吐,同時(shí),這個(gè)時(shí)延還是區(qū)分對(duì)待的,有些時(shí)延的可容忍區(qū)間很大,比如網(wǎng)卡(網(wǎng)卡IO之所以優(yōu)先級(jí)提升并不是很多,是因?yàn)槭紫染W(wǎng)卡是有隊(duì)列緩存的,而大多數(shù)的報(bào)文都是burst而來的,隊(duì)列緩存可以平滑掉首包延遲,其次,由于光速極限,相比于網(wǎng)絡(luò)延遲,主機(jī)調(diào)度延遲真的可以忽略不計(jì)。),有些卻很小,比如鍵盤鼠標(biāo)。所以說,Windows之類的Desktop系統(tǒng) 必須能夠區(qū)分一個(gè)進(jìn)程當(dāng)前的緊急性和重要性。

# Linux內(nèi)核能做到這種區(qū)分嗎?

Linux可以通過計(jì)算一個(gè)進(jìn)程的平均睡眠時(shí)間判定它是不是一個(gè)交互式IO進(jìn)程,從而決定要不是給它一定的優(yōu)先級(jí)提升,但是也僅能做到這個(gè)地步,因?yàn)長(zhǎng)inux內(nèi)核無法得到更進(jìn)一步的信息。

Linux內(nèi)核不知道一個(gè)進(jìn)程到底是不是IO進(jìn)程還是說僅僅在一個(gè)時(shí)間段內(nèi)有IO行為的CPU密集型進(jìn)程,Linux內(nèi)核也不知道一個(gè)進(jìn)程被喚醒是因?yàn)殒I盤的數(shù)據(jù)到了,還是無關(guān)緊要的信號(hào)到了,所以這一切,Linux內(nèi)核只能 啟發(fā)式預(yù)測(cè)。

Linux內(nèi)核僅僅跟蹤一個(gè)睡眠時(shí)間而且還是平均的睡眠時(shí)間,是區(qū)別不出進(jìn)程當(dāng)前的緊急性和重要性的。沒有外界的信息輸入,僅靠啟發(fā)預(yù)測(cè),當(dāng)前的AI算法貌似還沒有到這個(gè)境界吧。換句話說,啟發(fā)算法是不準(zhǔn)確的。你看看Linux內(nèi)核O(1) O(1)O(1)調(diào)度器的sleep_avg是如何計(jì)算并如何參與動(dòng)態(tài)優(yōu)先級(jí)調(diào)整的,就會(huì)明白我上面說的意思。

既然Windows系統(tǒng)的GUI操作比Linux流暢,那么想必Windows肯定是做到了進(jìn)程當(dāng)前的緊急性和重要性的區(qū)分咯?那是當(dāng)然。它是如何做到的呢?

雖然Windows的調(diào)度器也是基于優(yōu)先級(jí)的,也是搶占式的,也是同優(yōu)先級(jí)輪轉(zhuǎn)的,這看起來和Linux并沒有什么區(qū)別,甚至從4.3BSD開始,幾乎所有的操作系統(tǒng)的調(diào)度器基本都是按這個(gè)思路設(shè)計(jì)出來的,僅僅從 如何選出下一個(gè)投入運(yùn)行的進(jìn)程 這個(gè)算法上看,幾乎所有的操作系統(tǒng)調(diào)度器都是一樣的。Windows與眾不同的原因在于 其對(duì)優(yōu)先級(jí)的不同處理方式。

自4.3BSD以來,所有的基于優(yōu)先級(jí)的搶占式調(diào)度器的優(yōu)先級(jí)計(jì)算都包括兩部分因子,即固有優(yōu)先級(jí)和動(dòng)態(tài)優(yōu)先級(jí):

一直以來,

只是起到了 微調(diào) 的作用,而

才更具有參考意義,其比重更大。

Windows與眾不同,其弱化了進(jìn)程(其實(shí)應(yīng)該是線程,但是我就統(tǒng)一寫成進(jìn)程吧,為了照顧不懂Windows內(nèi)核原理的讀者)的初始基優(yōu)先級(jí)

,而強(qiáng)化了動(dòng)態(tài)優(yōu)先級(jí)

,更重要的是,動(dòng)態(tài)優(yōu)先級(jí)的值并非來自預(yù)測(cè),而是來自于 事件 ,事件本身的緊急性反饋到了動(dòng)態(tài)優(yōu)先級(jí)的值,而事件本身的重要性則反饋到了時(shí)間片:

可以看出,Windows對(duì)于不同的事件定義了不同的優(yōu)先級(jí)提升的具體數(shù)值, 將動(dòng)態(tài)優(yōu)先級(jí)的值和具體的事件做了精確的關(guān)聯(lián)。

這些數(shù)值的定義上,甚至精細(xì)而貼心,詳細(xì)的數(shù)值參見ntddk.h:

//

// Priority increment definitions.? The comment for each definition gives

// the names of the system services that use the definition when satisfying

// a wait.

//

//

// Priority increment used when satisfying a wait on an executive event

// (NtPulseEvent and NtSetEvent)

//

#define EVENT_INCREMENT? ? ? ? ? ? ? ? 1

//

// Priority increment when no I/O has been done.? This is used by device

// and file system drivers when completing an IRP (IoCompleteRequest).

//

#define IO_NO_INCREMENT? ? ? ? ? ? ? ? 0

//

// Priority increment for completing CD-ROM I/O.? This is used by CD-ROM device

// and file system drivers when completing an IRP (IoCompleteRequest)

//

#define IO_CD_ROM_INCREMENT? ? ? ? ? ? 1

//

// Priority increment for completing disk I/O.? This is used by disk device

// and file system drivers when completing an IRP (IoCompleteRequest)

//

#define IO_DISK_INCREMENT? ? ? ? ? ? ? 1

//

// Priority increment for completing keyboard I/O.? This is used by keyboard

// device drivers when completing an IRP (IoCompleteRequest)

//

#define IO_KEYBOARD_INCREMENT? ? ? ? ? 6

//

// Priority increment for completing mailslot I/O.? This is used by the mail-

// slot file system driver when completing an IRP (IoCompleteRequest).

//

#define IO_MAILSLOT_INCREMENT? ? ? ? ? 2

//

// Priority increment for completing mouse I/O.? This is used by mouse device

// drivers when completing an IRP (IoCompleteRequest)

//

#define IO_MOUSE_INCREMENT? ? ? ? ? ? ? 6

//

// Priority increment for completing named pipe I/O.? This is used by the

// named pipe file system driver when completing an IRP (IoCompleteRequest).

//

#define IO_NAMED_PIPE_INCREMENT? ? ? ? 2

//

// Priority increment for completing network I/O.? This is used by network

// device and network file system drivers when completing an IRP

// (IoCompleteRequest).

//

// 網(wǎng)卡IO之所以優(yōu)先級(jí)提升并不是很多,是因?yàn)槭紫染W(wǎng)卡是有隊(duì)列緩存的,而大多數(shù)的報(bào)文都是burst而來的,隊(duì)列緩存可以平滑掉首包延遲,其次,由于光速極限,相比于網(wǎng)絡(luò)延遲,主機(jī)調(diào)度延遲真的可以忽略不計(jì)。

#define IO_NETWORK_INCREMENT? ? ? ? ? ? 2

//

// Priority increment for completing parallel I/O.? This is used by parallel

// device drivers when completing an IRP (IoCompleteRequest)

//

#define IO_PARALLEL_INCREMENT? ? ? ? ? 1

//

// Priority increment for completing serial I/O.? This is used by serial device

// drivers when completing an IRP (IoCompleteRequest)

//

#define IO_SERIAL_INCREMENT? ? ? ? ? ? 2

//

// Priority increment for completing sound I/O.? This is used by sound device

// drivers when completing an IRP (IoCompleteRequest)

//

#define IO_SOUND_INCREMENT? ? ? ? ? ? ? 8

//

// Priority increment for completing video I/O.? This is used by video device

// drivers when completing an IRP (IoCompleteRequest)

//

#define IO_VIDEO_INCREMENT? ? ? ? ? ? ? 1

//

// Priority increment used when satisfying a wait on an executive semaphore

// (NtReleaseSemaphore)

//

#define SEMAPHORE_INCREMENT? ? ? ? ? ? 1

---------------------

仔細(xì)看,你會(huì)注意到對(duì)于聲卡而言,其IO完成時(shí),優(yōu)先級(jí)提升會(huì)很大,而磁盤,顯卡這種卻并不是很多,這充分體現(xiàn)了設(shè)計(jì)者的貼心。這充分考慮到了人耳的靈敏度和人眼的分辨率之間的對(duì)比,聲音是作為流順序輸出的,耳朵很容易分辨出聲音的卡頓,而對(duì)于圖像而言,完全可以慢慢雙緩沖刷層,人眼相比之下沒有那么高的分辨率識(shí)別到,因此聲卡事件必須優(yōu)先處理。

同時(shí),對(duì)于磁盤,網(wǎng)卡之類的,人就更是感覺不到了。除了聲卡之外,鍵盤鼠標(biāo)操作的IO完成對(duì)于優(yōu)先級(jí)提升的數(shù)值也很可觀,因?yàn)殒I盤鼠標(biāo)如果卡頓,人的輸入會(huì)明顯感覺到延遲,鼠標(biāo)則顯拖沓,這都是很容易識(shí)別的卡頓事件,所以Windows給予了進(jìn)程更高的動(dòng)態(tài)優(yōu)先級(jí)來盡快處理這些事件。

對(duì)于窗口子系統(tǒng)而言,當(dāng)一個(gè)窗口獲得焦點(diǎn)時(shí),對(duì)應(yīng)的處理進(jìn)程的優(yōu)先級(jí)也會(huì)得到提升,這會(huì)給人一種 你操作的界面總是很流暢 的感覺,畢竟你操作的界面就是前臺(tái)窗口,至于說此時(shí)后臺(tái)窗口的處理進(jìn)程,即便是僵死了你也不會(huì)有感覺,因?yàn)槟悴⒉徊僮魉鼈冄剑?dāng)你操作它們時(shí),對(duì)應(yīng)的處理進(jìn)程的優(yōu)先級(jí)就會(huì)提升。

所有的優(yōu)先級(jí)提升都伴隨著時(shí)間片的重新計(jì)算,但是和Linux不同的是,Windows并沒有直接將進(jìn)程優(yōu)先級(jí)和時(shí)間片按照正相關(guān)關(guān)聯(lián)起來,時(shí)間片是獨(dú)立計(jì)算的,大多數(shù)時(shí)候,Windows對(duì)于所有的進(jìn)程,不管優(yōu)先級(jí)是多少,均采用同一個(gè)時(shí)間片。

如此看來,Windows雖然也是優(yōu)先級(jí)調(diào)度的系統(tǒng),但是其優(yōu)先級(jí)卻是 操作行為驅(qū)動(dòng)的 ,這便是其與眾不同之處。

Linux內(nèi)核調(diào)度系統(tǒng)會(huì)精細(xì)區(qū)分磁盤事件的wakeup和鍵盤鼠標(biāo)聲卡事件的wakeup嗎?不會(huì)。

說完了Windows為什么操作GUI會(huì)很流暢,該說點(diǎn)不好的了,

# Windows經(jīng)常會(huì)死機(jī),為什么呢?

這很大程度上也和上面描述的調(diào)度器有關(guān)。

仔細(xì)看這個(gè)操作行為驅(qū)動(dòng)的動(dòng)態(tài)優(yōu)先級(jí)調(diào)度器,很大的一個(gè)問題就是容易餓死低優(yōu)先級(jí)的進(jìn)程,特別是Pbase P_{base}P base 很低的進(jìn)程。

Windows的解決方案是采用一個(gè)后臺(tái)進(jìn)程(學(xué)名叫做平衡集管理線程)輪詢的方式,將超過秒級(jí)都沒有被調(diào)度的進(jìn)程的優(yōu)先級(jí)拉升到很高的位置參與搶占。

這個(gè)機(jī)制有啥問題呢?問題在于Windows需要第三方線程來緩解饑餓,而不是靠調(diào)度器自身,這便增加了調(diào)解失敗的可能:

* 第三方線程本身的問題沒有按照預(yù)期工作。

* 饑餓進(jìn)程過多。

* 饑餓進(jìn)程優(yōu)先級(jí)提升后又被搶占。

* …

除了死機(jī)問題之外,Windows系統(tǒng)對(duì)于服務(wù)器版本的調(diào)度器調(diào)整做的也不夠優(yōu)雅,Windows僅僅是調(diào)整了服務(wù)器版本的系統(tǒng)參數(shù),而幾乎沒有對(duì)調(diào)度的算法做任何修改。對(duì)于服務(wù)器版本,Windows只是將時(shí)間片延長(zhǎng)了而已,同時(shí)幾乎不再動(dòng)態(tài)計(jì)算時(shí)間片,而是選擇始終使用相同的一個(gè)足夠長(zhǎng)的值,以減少進(jìn)程切換提高吞吐率。顯然這種方式并不妥當(dāng),因?yàn)閯?dòng)態(tài)優(yōu)先級(jí)根據(jù)事件的提升,還是會(huì)造成進(jìn)程間不斷搶占,從而影響吞吐。

不過,畢竟Windows是一個(gè)Desktop系統(tǒng),本身就不是為高吞吐而生的,這種針對(duì)服務(wù)器版本的策略調(diào)整便是無可厚非了。正如Linux服務(wù)器雖然可以很完美應(yīng)對(duì)高吞吐場(chǎng)景,其Desktop版本比如Ubuntu,Suse不也是心有余而力不足嗎?雖然Linux內(nèi)核也有動(dòng)態(tài)優(yōu)先級(jí)提升這一說。

# 該簡(jiǎn)單總結(jié)一下了。

在人機(jī)關(guān)聯(lián)上,Windows更加靠近人這一端,適應(yīng)了人的操作行為,為操作該機(jī)器的人提供了良好的短時(shí)延體驗(yàn),Linux相反,它靠近機(jī)器一端,讓CPU可以盡可能開足馬力跑task而不是頻繁切換,從而為客戶端提供最大的數(shù)據(jù)吞吐。

Windows的設(shè)計(jì)甚是精妙,考慮到了人的行為的每一個(gè)細(xì)節(jié)(除了對(duì)于死機(jī)的耐受力),除了動(dòng)態(tài)優(yōu)先級(jí)和具體時(shí)間精確關(guān)聯(lián)之外,對(duì)于待機(jī)恢復(fù)時(shí)間deadline在7秒內(nèi)也是很值得拍案,這個(gè)7秒的閾值考慮到了人的短期記憶的極限,如果有人突然想到了一個(gè)點(diǎn)子,需要打開電腦將其記錄下來,那么打開電腦的時(shí)間如果超過了7秒,那么可能這個(gè)點(diǎn)子就溜走了,所以待機(jī)恢復(fù)時(shí)間必須限制在7秒以內(nèi),哇塞不哇塞。

對(duì)于MacOS/iOS沒有過多的研究,但是可以想見應(yīng)該也如Windows這般了。因?yàn)樗鼈兌继幵谌藱C(jī)關(guān)聯(lián)的人的這一端。隨便看了下MacOS的開發(fā)手冊(cè),找到了下面的段落:

當(dāng)我找和GUI和調(diào)度相關(guān)的東西時(shí),就在上面這段的下面,有這個(gè)定義:

嗯,看來內(nèi)核也是能看到所謂的前臺(tái)窗口的。

不管怎么說,Windows,MacOS/iOS這些系統(tǒng),共同的特點(diǎn)就是 大多數(shù)情況下,同時(shí)只有一個(gè)焦點(diǎn)窗口在前端接受輸入輸出。 畢竟把窗口縮小排滿一屏幕的很少見。然后呢?然后這就是一個(gè)典型的場(chǎng)景啊!

你看看Win10,不就可以設(shè)置為平板模式嗎?

傾其機(jī)器和操作系統(tǒng)內(nèi)核所有資源和機(jī)制照顧這少數(shù)的,幾乎是唯一的前臺(tái)焦點(diǎn)窗口的處理進(jìn)程,這幾乎就是單進(jìn)程處理啊! 然后處理好用戶的窗口切換即可,比如Windows的Ctrl-Tab。

Linux如若按照這個(gè)思路,單獨(dú)再寫一個(gè)調(diào)度器,替換掉CFS,而不是增加一個(gè)調(diào)度類,如此一來將系統(tǒng)中所有的進(jìn)程統(tǒng)一按照 優(yōu)先級(jí)和事件相關(guān)聯(lián) 的方式對(duì)待,我想問題應(yīng)該能優(yōu)化不少。

已經(jīng)快凌晨了,說點(diǎn)別的但是相關(guān)的吧。

Linux內(nèi)核O(1) O(1)O(1)調(diào)度器的歷史其實(shí)很短暫,2.6初始到2.6.22,但是非常經(jīng)典的Linux內(nèi)核方面的書,都是在描述這期間的Linux內(nèi)核版本,這在當(dāng)時(shí)就給了人們一個(gè)假象,O(1) O(1)O(1)調(diào)度器是無敵的,是劃時(shí)代的,于是,當(dāng)有了新的CFS調(diào)度器的時(shí)候,人們哇塞一聲,O(1) O(1)O(1)只是銀河系級(jí)別的,而CFS是宇宙級(jí)別的。

但其實(shí),O(1) O(1)O(1)的意義只是優(yōu)化了 如何快速找到下一個(gè)要運(yùn)行的進(jìn)程 ,雖然它也涉及了動(dòng)態(tài)優(yōu)先級(jí)的計(jì)算,但是這并不是它的重點(diǎn)。說實(shí)話,你若看看Windows的調(diào)度器,4.4BSD,SystemV4的調(diào)度器,基本上都是位圖加優(yōu)先級(jí)隊(duì)列的形式,思路幾乎是同一個(gè),這么說來都是O(1) O(1)O(1)咯,而且人家這些調(diào)度器早在Linux還是O(n) O(n)O(n)調(diào)度器的時(shí)候就已經(jīng)存在好幾年了,卻無人問津。

Windows內(nèi)核的調(diào)度算法不為人知的原因除了其閉源之外,還有一個(gè)原因就是Windows內(nèi)核方面的技術(shù)總體上推廣的人太少,國內(nèi)除了潘愛民一直在致力于這方面的推廣之外,在沒有別人了。估計(jì)是因?yàn)榇蠹矣X得Windows內(nèi)核方面,Debug之外的東西,學(xué)了也沒啥用吧。

你說Linux開源沒錯(cuò),BSD不也開源嗎?怎么就沒有人注意BSD的調(diào)度器實(shí)現(xiàn)呢?哈哈,開不開源無所謂,關(guān)鍵得能造勢(shì)搞事情,而且獲取方便,讓大家用起來你的東西才真真的啊。Linux2.4版本說實(shí)話及其垃圾,但關(guān)鍵是很多人用起來了,這就是全部了。Solaris雖然設(shè)計(jì)完美優(yōu)雅,可是有壁壘,沒人用,最終也還是涼涼。同樣的事情參考以太網(wǎng)。

通篇都在比較Windows和Linux的調(diào)度器如何影響人們的操作體驗(yàn)。最后說說iOS和Android吧,題外話,不涉及技術(shù)。

Android就是卡,不接受反駁。

再貴的Android機(jī)器也卡,三星的,華為的照卡不誤,只是相比別的稍微好一點(diǎn)點(diǎn)而已。這意味著它們成不了街機(jī)。因?yàn)槭謾C(jī)是買來用的,不是買來debug的,除了程序員沒人在乎Android機(jī)慢的原因,即便是程序員也很少有折騰明白的,只是因?yàn)檫@份職業(yè)讓他不用Android就不正確。不過現(xiàn)在互聯(lián)網(wǎng)公司的程序員用iPhone的也多了,因?yàn)楹糜冒 T僬哒f了,互聯(lián)網(wǎng)公司程序員大概率以做業(yè)務(wù)邏輯為主,底層技術(shù)欠缺,無力debug,當(dāng)然是什么好用用什么,iPhone貴,但是互聯(lián)網(wǎng)程序員收入高啊。

最終,Android機(jī)的唯一優(yōu)勢(shì)就是價(jià)格,你讓Android賣的和iPhone一樣貴試試,分分鐘被絞殺。要說還有唯一點(diǎn)五的,就是品牌,XX也不是吃素的,就算XX做的再爛,就憑它這牌子,也不缺市場(chǎng),比如我就是XX用戶,我并不是覺得XX的Android比小米的Android好,而是我喜歡XX這個(gè)公司,這個(gè)品牌,僅此而已

網(wǎng)站題目:包含Windows安卓子系統(tǒng)卡頓的詞條
本文網(wǎng)址:http://chinadenli.net/article10/dseoego.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器網(wǎng)站建設(shè)外貿(mào)建站服務(wù)器托管外貿(mào)網(wǎng)站建設(shè)Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)