真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

包含windows手機(jī)系統(tǒng)卡的詞條

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

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

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、下冶網(wǎng)站維護(hù)、網(wǎng)站推廣。

我就知道有人會(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ǔ),沒有別的原因,只是因?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ù)總體上推廣的人太少,國(guó)內(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è)品牌,僅此而已

手機(jī)卡住了怎么辦?

如果您使用的是華為手機(jī),手機(jī)在使用過程中出現(xiàn)卡死現(xiàn)象,請(qǐng)您按照以下方法排查:

1.強(qiáng)制重啟設(shè)備

建議您強(qiáng)制重啟設(shè)備。如果不能重啟或重啟后仍然出現(xiàn)卡死,可能是硬件故障。請(qǐng)您備份數(shù)據(jù)(QQ、微信等第三方應(yīng)用需單獨(dú)備份)后攜帶購(gòu)機(jī)憑證前往華為客戶服務(wù)中心進(jìn)行檢測(cè)處理。

2.清理設(shè)備空間

(1)清理后臺(tái)應(yīng)用,多個(gè)應(yīng)用程序在后臺(tái)運(yùn)行會(huì)占用過多內(nèi)存或其他資源,設(shè)備超出負(fù)荷可能會(huì)出現(xiàn)異常。建議您盡量避免多個(gè)應(yīng)用程序同時(shí)運(yùn)行。

(2)清理存儲(chǔ)空間,可能是存儲(chǔ)空間不足導(dǎo)致低性能。建議您使用手機(jī)管家清理設(shè)備存儲(chǔ)空間,并卸載不常用的應(yīng)用。

3.檢查是否運(yùn)行不兼容的應(yīng)用程序

(1)某些第三方應(yīng)用與系統(tǒng)不兼容可能導(dǎo)致設(shè)備死機(jī)、系統(tǒng)卡死的現(xiàn)象,建議您進(jìn)入應(yīng)用市場(chǎng)下載最新版本應(yīng)用。

(2)如果系統(tǒng)不停報(bào)錯(cuò)、無法正常開機(jī),您可以進(jìn)入安全模式,然后進(jìn)入設(shè)置,搜索進(jìn)入應(yīng)用管理,卸載此前安裝的軟件。

4.檢查是否安裝了 microSD卡

請(qǐng)您重新插拔 microSD 卡后檢查問題是否仍然存在。如果問題不存在則可能是接觸不良,如果問題仍然存在了,則可能是 microSD 本身?yè)p壞或與系統(tǒng)不兼容。建議更換優(yōu)質(zhì) microSD 卡。

5.可能系統(tǒng)文件有損壞

系統(tǒng)在運(yùn)行時(shí),無法找到對(duì)應(yīng)的文件,從而發(fā)生錯(cuò)亂,導(dǎo)致設(shè)備出現(xiàn)故障。請(qǐng)使用華為手機(jī)助手進(jìn)行系統(tǒng)修復(fù):

(1)前往華為手機(jī)助手官網(wǎng),下載安裝最新Windows版本的華為手機(jī)助手。

(2)打開華為手機(jī)助手,在頁(yè)面右下角點(diǎn)擊系統(tǒng)修復(fù)。

(3)在手機(jī)關(guān)機(jī)狀態(tài)下,通過USB數(shù)據(jù)線連接電腦,然后同時(shí)按住手機(jī)音量下鍵和電源鍵。

(4)手機(jī)進(jìn)入FastBoot模式后,華為手機(jī)助手會(huì)提示“成功進(jìn)入系統(tǒng)修復(fù)模式”,點(diǎn)擊開始修復(fù)。

(5)修復(fù)安裝包下載完成后會(huì)自動(dòng)安裝,期間請(qǐng)勿斷開USB連接,整個(gè)過程需要一些時(shí)間,請(qǐng)耐心等待。系統(tǒng)修復(fù)完成后,手機(jī)會(huì)自動(dòng)進(jìn)入系統(tǒng)更新模式,系統(tǒng)更新完成后手機(jī)會(huì)自動(dòng)重啟。

溫馨提醒:系統(tǒng)修復(fù)期間,請(qǐng)勿斷開USB連接。

若不能進(jìn)入FastBoot模式或系統(tǒng)修復(fù)失敗,請(qǐng)?zhí)崆皞浞莺弥匾獢?shù)據(jù)(QQ、微信等第三方應(yīng)用需單獨(dú)備份),攜帶購(gòu)機(jī)憑證前往華為客戶服務(wù)中心檢測(cè)。

6.如果問題仍然存在,請(qǐng)您攜帶購(gòu)機(jī)憑證前往華為客戶服務(wù)中心進(jìn)行檢測(cè)處理。同時(shí)建議您檢查手機(jī)是否安裝非官方系統(tǒng),非官方系統(tǒng)會(huì)影響設(shè)備的穩(wěn)定性,導(dǎo)致設(shè)備出現(xiàn)異常。

溫馨提醒:如果您之前沒有備份數(shù)據(jù),恢復(fù)、升級(jí)手機(jī)系統(tǒng)版本和檢測(cè)可能有數(shù)據(jù)丟失的風(fēng)險(xiǎn)。 ?

相關(guān)鏈接如下:華為客戶服務(wù)中心維修備件價(jià)格查詢預(yù)約服務(wù)寄修服務(wù)

安卓運(yùn)行windowsxp系統(tǒng),再好的手機(jī)都會(huì)卡嗎?

主要是手機(jī)和電腦的配置不同?,F(xiàn)在的手機(jī)和電腦不是一個(gè)級(jí)別的。平板電腦運(yùn)行XP也無法達(dá)到電腦的水平。所以就算是現(xiàn)在最好的手機(jī),還是無法很好的運(yùn)行電腦的XP系統(tǒng)。不然,手機(jī)生產(chǎn)商可以直接出XP系統(tǒng)的手機(jī)了。現(xiàn)在的WInphone手機(jī)和電腦的也是不一樣的系統(tǒng)。

為什么手機(jī)更新系統(tǒng)以后變得特別卡?

硬件資源不足。Android 越升級(jí)越快是因?yàn)?Android 具有極強(qiáng)的適應(yīng)性,硬件性能不夠可以由系統(tǒng)自動(dòng)禁用某些功能或者自動(dòng)調(diào)整使得設(shè)備流暢,而且這種自動(dòng)調(diào)整的能力目前來說在隨著版本更新不斷增強(qiáng)(如 4.0 的“黃油計(jì)劃”)。而 Apple 系的 OS 其實(shí)技術(shù)并不先進(jìn)。如 OS X 和 iOS 共用的內(nèi)核 Darwin ,其實(shí)可以理解為 BSD 和 Mach 的“合體”,基礎(chǔ)技術(shù)與 Android 基于的 Linux 不相上下,與 Microsoft 的 NT 內(nèi)核差一大截(也就是說 Windows 其實(shí)相當(dāng)先進(jìn))。

iOS 和 OS X 的用戶體驗(yàn)靠的是 Apple 的人機(jī)交互設(shè)計(jì)能力,再就是堆硬件。例如墓碑后臺(tái)機(jī)制,近乎變態(tài)的硬件配置(7420 之前 A8 靠雙核天下無敵手)只運(yùn)行一個(gè) App 當(dāng)然流暢。然而硬件發(fā)展極快,新 OS 是以新硬件為目標(biāo)設(shè)計(jì),以 Apple 的技術(shù)實(shí)力,卻做不到讓前幾代的設(shè)備擁有與新硬件相同的流暢度。因此就會(huì)看上去變“卡”了。

在此并沒有輕視 Apple 技術(shù)實(shí)力的意思,而是說 Apple 的技術(shù)實(shí)力并不如 Google 和 Microsoft ,或者說有技術(shù)不愿意用(例如為了擴(kuò)大新產(chǎn)品的銷量)。iOS 并沒有對(duì)老設(shè)備優(yōu)化,也沒有類似 Android 的自動(dòng)調(diào)整機(jī)制。Apple 的手段很暴力,就是堆硬件。然而一旦硬件過時(shí),新版 OS 的執(zhí)行效率必然下降。

手機(jī)卡住了怎么辦

若使用vivo手機(jī)出現(xiàn)卡住死機(jī)無法操作的情況,可參考以下方法排查處理:

1、強(qiáng)制重啟手機(jī)

嘗試將手機(jī)強(qiáng)制重啟,觀察是否恢復(fù)使用。

強(qiáng)制重啟方法:

2017年9月以前上市機(jī)型(X20之前機(jī)型):長(zhǎng)按"電源鍵"12秒以上

2017年9月后上市機(jī)型以及后續(xù)上市新機(jī)型(X20以及之后機(jī)型):同時(shí)按住"電源鍵"+"音量減鍵"10秒以上

NEX 3/NEX 3S:長(zhǎng)按頂部圓鍵10秒以上

2、升級(jí)系統(tǒng)版本

進(jìn)入設(shè)置--系統(tǒng)升級(jí)頁(yè)面,檢查手機(jī)系統(tǒng)版本是否為最新版本,系統(tǒng)更新會(huì)提升系統(tǒng)對(duì)第三方應(yīng)用的兼容性以及系統(tǒng)的穩(wěn)定性,部分新版本還會(huì)增加一些新功能。

3、確認(rèn)是否運(yùn)行了不兼容的應(yīng)用程序

某些第三方軟件與系統(tǒng)不兼容可能導(dǎo)致手機(jī)死機(jī)、重啟等現(xiàn)象,建議在【桌面上長(zhǎng)按軟件圖標(biāo)應(yīng)用信息存儲(chǔ)】或【設(shè)置應(yīng)用與權(quán)限應(yīng)用管理找到相應(yīng)的軟件存儲(chǔ)】,點(diǎn)擊"清除數(shù)據(jù)"和"清除緩存",必要時(shí)請(qǐng)備份軟件數(shù)據(jù),卸載軟件后到應(yīng)用商店重新下載安裝。

4、檢查手機(jī)存儲(chǔ)空間

請(qǐng)檢查手機(jī)剩余存儲(chǔ)空間,如果存儲(chǔ)空間較低,系統(tǒng)性能會(huì)急劇下降,建議使用i管家及時(shí)清理手機(jī)存儲(chǔ)空間,并卸載不常用的軟件,保持存儲(chǔ)剩余空間在20%以上。

5、重置手機(jī)

必要時(shí)可備份好手機(jī)資料后,進(jìn)入【設(shè)置系統(tǒng)管理備份與重置清除所有數(shù)據(jù)】,對(duì)手機(jī)進(jìn)行重置。 可點(diǎn)擊網(wǎng)頁(yè)鏈接查看雙清操作方法。

6、服務(wù)中心檢測(cè)

若以上方法未能解決問題,請(qǐng)?zhí)崆皞浞莺檬謾C(jī)數(shù)據(jù),攜帶手機(jī)和購(gòu)機(jī)憑證前往vivo客戶服務(wù)中心檢測(cè);進(jìn)入vivo官網(wǎng)/vivo商城APP--我的--網(wǎng)點(diǎn)查詢或點(diǎn)擊網(wǎng)頁(yè)鏈接,選擇當(dāng)前所在的城市即可獲取服務(wù)中心的地址與聯(lián)系方式。建議去之前先提前電話聯(lián)系,避免空跑,合理規(guī)劃行程,安全出行。

使用windowsphone11的手機(jī)卡不卡

不卡。使用windowsphone11的手機(jī)不卡,IT之家獲悉,在Windows11中,微軟將引入對(duì)“觸摸喚醒”設(shè)備的支持,這項(xiàng)功能以前在WindowsPhone上提供。


當(dāng)前題目:包含windows手機(jī)系統(tǒng)卡的詞條
鏈接地址:http://weahome.cn/article/hghgph.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部