關於電腦的待機、睡眠、休眠,這篇應該可以解答你所有的疑問

本文提綱:

  • 前言,極簡計算機模型
  • Windows 電腦的四種運行狀態
  • 四種運行狀態的總結表
  • Windows 電源狀態的兩種變體,混合睡眠和快速關機
  • 顛覆常識:關機再開機,不等於重新啟動(Win8+)
  • iPhone/iPad 的電源管理是如何做的
  • 談“待機”的含義

前言

這年頭智能電子產品已經無處不在,日常工作我們用電腦,Windows 或是 Mac ,出門在外帶手機,蘋果的或是安卓的,你在這些電子設備的屏幕上、或是使用手冊上,是否留意到 待機、睡眠、休眠 這些提法呢?是否曾經困惑它們到底是什麼意思、各自有什麼區別呢?我以十五年軟件工程師的經驗向你解釋這個問題,應該能夠解開你的困惑。

瞭解這些有什麼作用?我總結瞭三條:

  1. 滿足好奇心。
  2. 更有效率地使用你的電子設備。
  3. 解決疑難問題——如果你剛好碰到的話。

最常碰到 待機、睡眠、休眠 這幾個詞匯的場合,應該是 Windows 電腦瞭,從 Windows 2000 起,這些概念就一直存在,直到 Windows 10,而且,微軟還將它們變得越來越復雜,比如,Windows Vista/7 起出現瞭“混合睡眠”,Windows 8 起又引入瞭“快速關機/快速開機”,這些讓人雲裡霧裡的詞匯,本文將一並幫你解釋清楚。

由於 Windows 電腦幾乎每個人都用過,而且也是出現最多名詞的系統,我就從 Windows 系統入手來解釋,當然,所得的結論最終也可以擴展到其他系統上,比如 Mac/iPhone/iPad ——因為它們的計算機體系結構是相同的,它們都是廣義上的“計算機”。

【鋪墊:極簡計算機模型】 為瞭解釋清楚本文主題,我不得不先花一點時間點撥一些必須的基礎概念,因為下頭的很多系統行為的描述需要依賴這些概念。一套計算機硬件可以認為是 3+1 的結構。3 表示三種基礎部件:CPU,內存,外圍設備(簡稱外設),1 表示硬盤。CPU: 相當於人的大腦中負責做決定的那個功能部件。計算機下一個時間點要做什麼事(屏幕上顯示一個圖形,還是聯網下載一首歌曲),其動作指令是由 CPU 發出的。內存: 相當於人大腦中的記憶。全稱叫 RAM, Random-Access Memory 的縮寫。比如你用電腦在編輯一份文檔,當文檔還未存盤時,文檔的內容是放在內存中的,Ctrl+S 存盤後才被寫入硬盤。對應到具體的硬件上,內存就是電腦商店裡賣的“內存條”,Windows 和 Mac 電腦通常會配備 4, 8, 或 16GB 的 RAM。iPhone 6 隻有 1GB RAM,到 iPhone 6S 時增大到 2GB。外設:比如鍵盤、鼠標、網卡、攝像頭、聲卡、顯示器、打印機等。CPU 執行的動作最終需要被人感知(比如播放一個影片讓人看到),而人發出的指令也需要傳達給 CPU (比如要求發送一段文字給 QQ 好友),各種各樣的外設充當瞭人和 CPU 之間信息交換的接口。最後說硬盤。

  • 硬盤其實也是一種外設,不過它在本文的討論中地位特殊,我將其單獨拎出。硬盤好比是人的藏書。我們的大腦無法記下所有的信息,我們可以將難記的信息先記到書裡頭,這樣就不怕忘記瞭,待有需要的時候當場查書獲知即可。
  • 現在到商店裡買一臺電腦,硬盤通常在 256GB 以上。而 iPhone/iPad 規格參數上說的 64/128/256 GB,實質是指它的“硬盤”容量。
  • 硬盤和內存都可以用來存放信息。它們有兩個實質區別:
    • 如果系統突然掉電,內存中的信息將立即丟失,而硬盤中的信息則完好無損。
    • 內存中的信息可以被 CPU 直接處理(比如對內存中的兩個數進行加法或乘法),處理速度很快,而硬盤中的信息無法被 CPU 直接處理,硬盤中的信息必須先經過一個慢速通道裝載到內存後才能被 CPU 處理。這是過去幾十年來人們的設計權衡:由於某一時刻一個具體的計算場景通常隻需要相關的少量數據參與即可,因此,人們一方面用昂貴的成本制造低容量但高速的內存、另一方面用便宜的成本制造高容量但低速的硬盤,使得當前需要參與運算的數據在內存中能夠裝下就行,暫時用不到的數據,就讓它們呆在硬盤上。

Windows 電腦的四種運行狀態

這四種運行狀態(或稱電源狀態)是:

  1. 工作狀態 (Working), S0
  2. 睡眠狀態 (Sleep), S1 或 S3
  3. 休眠狀態 (Hibernate), S4
  4. 關機狀態 (Shutdown), S5

請註意:以上四種狀態中,並沒有一種被我叫作“待機狀態”,因為“待機”這個詞是有歧義的,因此我避免使用它。

[一個提示] 在 Windows 2000 和 Windows XP 中,『開始』菜單→關機選項中確實有一項被叫作“待機(Standby)”,它的效果實際上等同於睡眠(Sleep)。微軟後來應該是也覺得 Standby 這個提法有歧義,因此從 Vista 起就將其改名為“睡眠(Sleep)”。由於 Windows XP 的影響很深遠,有些軟硬件廠商一直用 Standby 來指代 Sleep ,直到今天。現在,請暫時忘掉“待機”這個提法,本文最後一部分回頭再討論這個詞。

【工作狀態】 工作狀態就是一個系統的全功能狀態,用戶讓它幹什麼它馬上就幹什麼,隻要是這個系統的軟硬件能力范圍之內。形象地說,用戶敲一個按鍵或移動一下鼠標,屏幕上立即就有相應的反饋。

現在有一個問題,我不敲鍵盤也不按鼠標,電腦屏幕上一片寂靜,那它還是處在工作狀態嗎?當然是,你應該將工作狀態與否的實質理解為 CPU 有沒有執行代碼。雖然你覺得電腦是一片安靜,但 CPU 可沒閑著,因為系統中總是有一些後臺程序在活動,比如,後臺有個程序在幫你下載電影,操作系統自身的安全防護程序在掃描病毒。

沒有人直接參與的這種工作狀態,常常也被稱作“空閑狀態(Idle)”。空閑狀態跟睡眠、休眠的區別在於,空閑狀態下的系統仍舊是全功能運作的,有任何外部事件的發生,系統都會立即處理。比如:有個 QQ 好友突然發消息給你,你的 QQ 程序就會立即收到並彈出提示,即使你當時人不在電腦旁;反之,進入睡眠狀態的 Windows 電腦是無法收到新的 QQ 消息的。

瞭解瞭工作狀態的關鍵特征,現在可以說非工作狀態瞭。拿 Windows 7 舉例,開始菜單,關機選項能夠呈現睡眠、休眠、關機這三種選擇,全瞭。下面給出中英文界面對照圖。

【睡眠狀態】

睡眠狀態的特征是: CPU 停止執行指令,內存中的東西原樣留在內存中。

睡眠狀態意味著:

  1. 你的未存盤文檔沒有丟失,它留在你的內存中。
  2. 後臺的所有程序暫停執行,比如,後臺的下載程序暫停下載動作,QQ 也不再能收到好友消息。
  3. 你可以敲一下鍵盤將系統喚醒。(點擊或移動鼠標不一定能喚醒系統,看具體情況)
  4. 在系統被喚醒前,如果斷電,內存中的信息將全部丟失,因為內存中的信息需要少量電力來維持。換言之,你的未存盤文檔的未存盤部分將丟失。
  5. 系統喚醒後,所有的系統狀態恢復成睡眠前的樣子。你之前打開的所有應用程序窗口都留在原處,裡頭的內容也沒變,你可以繼續編輯未存盤的文檔,就好像系統並未經歷過睡眠那般。

【休眠狀態】

休眠狀態和睡眠狀態的大部分特征是相同的,區別之處在於:原先睡眠狀態下留在內存中的信息被原樣寫入硬盤,休眠完成後系統自身進入零耗電狀態;喚醒系統時,硬盤中的內存鏡像被原樣裝入內存,系統恢復運行。

這意味著:

  • 系統執行“進入休眠”這個操作,所花費的時間比“進入睡眠”要長很多,畢竟多瞭個“寫硬盤”的動作。如果電腦上的硬盤是機械硬盤,寫入速度算 100MB/s,內存大小是 4GB,那麼,寫硬盤時間可長達 40 秒。Windows 7 起有個改進,會將內存數據壓縮後再寫入硬盤,通常會節省一半的時間,即 20 秒,另外,當前沒用到的內存塊也不會被寫入硬盤,又能再節省一些時間。
  • 休眠完成後,即使你拔掉電源線,未存盤的文檔也不會丟失,因為數據已經存在硬盤上瞭。

一點點小結:由於睡眠和休眠並不丟失內存中的數據,因此 Windows 並不會提示你保存未存盤的文件。

【關機狀態】

在 Windows 7 及之前版本的 Windows 上,開始菜單→關機,就是進入這種狀態。關機將導致內存中的數據全部被清空,因此,應用程序會提示你保存未存盤的文檔;如果你發現文檔還需要修改修改才值得保存,你可以趁此機會取消剛才的關機請求。

這裡提一下“重啟(Restart/Reboot)”這個詞,進入關機狀態後再開機,被稱為重啟;如果是睡眠或休眠後再喚醒(Wakeup/Resume),則不叫重啟。

【一個有趣的問題,既然休眠是零耗電,你願不願意用休眠來代替關機呢?】

就我個人而言,當我發現 Windows 2000 開始提供休眠功能時,我就愛上它瞭,我默認的關電腦方式就改為瞭休眠。我喜歡給電腦配大內存(總是將主板的內存槽都插滿),同時打開多個程序,休眠帶來的巨大好處是,從休眠中喚醒後,我昨天遺留的工作環境、軟件狀態就原原本本地在那裡瞭,我的工作思路馬上就能接上。

感謝 Windows NT 內核的高穩定性,一次 Windows 開機後一般能運行一兩個月才需要重啟。需要重啟的場合有下面這麼幾種:

  • 升級瞭一個軟件,升級過程被要求重啟,不重啟的話,有一些舊文件無法被刪除。
  • 原因一般是系統組件或驅動程序出瞭問題,不重啟無法解決故障。
  • Windows 自身有 bug,導致內存消耗太大的情況下無法進入休眠。微軟陸續出過一些補丁來修正,但似乎一直沒有徹底解決,該問題到 Windows 8.1 時還一直存在。

那休眠和喚醒的速度,比起關機再開機的速度,是否真的更快瞭呢?我的親身體會是,如果內存沒超過 8GB,休眠喚醒的速度體驗確實比較快,而且,內存越小越快。想想看,Windows 一次開機過程,時間都消耗到哪裡去瞭?如果是安裝一份全新的 Windows ,不裝任何第三方軟件,它的開機速度是相當快的,大約 20 秒即可;隨著你安裝越來越多的第三方軟件,開機速度將越來越慢,為什麼呢?因為很多第三方軟件會在系統中安插後臺進程,那些後臺進程是一開機就要執行的,是它們拖慢瞭開機速度。第三方軟件的進程做完初始化動作後,如果你沒有明確去使用它們,它們一般處於安靜狀態,隻是消耗著少量的內存。現在你采用休眠策略,休眠和喚醒的過程,那些第三方程序是不需要重新初始化的,這部分時間就被活生生省下來瞭。

很可惜啊,休眠這麼好的功能,很多人其實並不懂得使用,也許他們聽說過這個功能,但是不敢使用。畢竟很多人對陌生的事物總是抱有一絲恐懼的。

~~~~

休眠是個好功能,但微軟從 Vista 起的一個設計讓我蠻痛恨的:休眠過程不再顯示進度條瞭。

Windows XP 和 Windows 2000 的休眠過程會顯示一個進度條,用於表示內存數據寫入硬盤的進度。Windows XP 的顯示如下:

剛才說過,這個操作通常需要幾十秒時間,內存越大休眠越費時,因此有個進度條是很好的設計。然而,從 Vista 起,這個休眠進度條被微軟砍掉瞭,那屏幕上顯示什麼呢?屏幕上什麼都不顯示,就是個黑屏。這就很讓人討厭瞭。想想以下兩種場景。

  • 假設我用臺式電腦,我希望休眠完畢後切斷電源。我如何直觀判斷休眠是否完成瞭呢?
  • 我出差用筆記本電腦,我希望休眠完成後再將電腦塞到包裡。需要判定的理由是,有某些情況休眠會失敗,休眠失敗意味著,雖然我向 Windows 下達瞭休眠請求,但 Windows 一直卡在工作狀態,我的電腦還在大量地發熱。冒然將還在工作狀態的電腦憋在電腦包裡,電腦有可能會因為過熱而損壞。

沒有瞭休眠進度條,休眠是否完成的判斷方法還是有的,隻不過比較費神,我得盯住電腦的電源指示燈,電源指示燈熄滅我才能確認休眠完成瞭。如果黑屏持續的時間比以往的經驗要長很多,我隻能判定休眠失敗瞭,此時隻好強制關機。

微軟為什麼要把這樣有用的一個反饋界面給砍掉呢?我不相信這是技術難題,既然 Windows XP 都做到瞭,Vista 為什麼做不到?兩個字總結:犯懶。當然,微軟會在其他方面找一些冠冕堂皇的理由來辯解,但根本站不住腳。下頭講“混合睡眠”時就會有這樣一個理由。

【四種運行狀態的總結表】

在 Sleep 狀態下,除瞭鍵盤以外的哪些外設可以喚醒系統,不同軟硬件的系統有不同的表現。比如,有些機器的 BIOS 設置中允許 USB 鼠標喚醒系統;使用 Intel 的網卡,通過網卡的驅動程序可以設置是否被特定的數據包喚醒。

下圖是一個 Intel 網卡的驅動程序配置界面,可以配置 Windows 被什麼樣的網絡數據包喚醒。圖中所謂的“待命”,顯然是沿用瞭 Windows XP 時代的 Standby 用語,其實它是 Sleep 的意思。

註:從概念上說,休眠是比睡眠更深度的節能狀態,意思是,

  • 在休眠狀態下,更多的外設會被系統置於“非活動”狀態以節省電力消耗。舉個例子,一臺 2005 年左右的 PC 臺式機,進入睡眠時我們會發現它的硬盤仍在旋轉(能聽到旋轉的嗡嗡聲),而進入休眠時,硬盤肯定是不轉的。
  • 休眠狀態下能夠主動喚醒主機的外設也更少。睡眠和休眠狀態下具體哪些外設能夠喚醒主機,跟當前系統的軟硬件配置有很大關系。

Windows 電源狀態的兩種變體

本節要解釋的是 Windows 電源狀態的兩種變體。

  • Windows Vista 時引入的“混合睡眠”。
  • Windows 8 時引入的“快速關機”。

【 混合睡眠 (Hybrid Sleep) 】

拿 Windows 的截圖說明,在高級電源設置中,有個“允許混合睡眠”選項。

“允許混合睡眠”打開,你將發現開始菜單→關機選項中故意不給你顯示“休眠”瞭(當然,這不是本質問題,我們仍舊可以用 shutdown /h 命令來明確要求休眠)。

“允許混合睡眠”打開後,你在開始菜單中執行“睡眠”,其實際動作是執行混合睡眠(之前的那種睡眠,不妨起名叫“經典睡眠”)。混合睡眠的特征是:不但將原有內存數據留在內存中,同時也將內存數據寫一份到硬盤中。

混合睡眠帶來的好處是:

  • 如果睡眠後你的電腦供電一直沒斷,那麼,喚醒的速度將很快,2~3 秒,因為所有的工作狀態一直留在內存中。
  • 如果睡眠後你的電腦斷電瞭,那麼也不要緊,喚醒時將從硬盤中裝入睡眠前的內存狀態,你的工作數據也不會丟失,隻不過喚醒時間較長罷瞭。此時的斷電相當於是讓系統自動進入瞭休眠狀態。
  • 既然斷電不要緊,我們就可以設一個 60 分鐘的定時器(上一張圖“在此時間後休眠”),讓系統在進入混合睡眠 60 分鐘後將自己斷電,避免長時間無人使用電腦導致的電力消耗。想象一個有 100 臺電腦的公司,每臺 5~10W 的電力節省是很可觀的。

嗯,混合睡眠是個相當聰明的設計,無需改變系統的基礎架構,隻是將 Sleep 和 Hibernate 的特征做一些組合就能帶來嶄新功能。

那混合睡眠是不是所有方面都比經典睡眠好呢?也不是,當我們隻需要 Sleep 電腦一小會兒就喚醒它的情況下,進入混合睡眠的時間顯然要長於經典睡眠。另外,對於安裝瞭巨量內存(比如 32GB)的機器、且內存用得很滿的情況下,往硬盤中寫入和讀取休眠文件的耗時相當之久,也許用戶會更甘願多消耗一些電力來換取每次“開機/關機”的迅捷。

對於大多數用戶,混合睡眠總體是有利的,因此,在支持睡眠和休眠的電腦上,Windows 7 及其後續版本將混合睡眠功能默認打開瞭。

現在可以回頭想一個問題,為什麼從 Vista 起,Windows 執行休眠的過程不顯示進度條瞭?這個問題估計很難找到微軟的官方回答。但如果有,他們的回答很可能是這樣的:為瞭執行 Sleep, Hybrid Sleep, Hibernate 過程用戶界面的一致性。怎樣做到一致性呢?就是統統讓屏幕熄滅唄。唉,我隻能嘆口氣瞭。我期望的理想行為是,當寫入休眠文件的動作正在執行時,屏幕上應該要出現進度條,同時,根據用戶執行的是 Hybrid Sleep 還是 Hibernate ,旁邊配上文字“正在進入睡眠” 或 ”正在進入休眠“,寫硬盤完畢後,屏幕再顯示一行”您現在可以安全地拔除電源瞭“, 停留兩秒,將自己斷電。

【 快速關機 (Fast Shutdown) 】

Fast Shutdown 的正式稱呼是 Fast Startup (快速開機) 或 Fast Boot 。 我為什麼喜歡叫它 Fast Shutdown 呢?因為它更體現本質,Fast Shutdown 是 Fast Startup 的前提。

Windows 8 剛出來的那陣子,你是否聽到網上說 Windows 8 的開機/關機速度比 Windows 7 快瞭很多,你自己嘗試瞭,也確實體會到瞭。那你知道快的原理在何處嗎?

用 Windows 10 (1511) 為例(繼承瞭 Fast Shutdown 功能),開啟/關閉 Fast Shutdown 的選項如下圖:

Fast Shutdown 開啟的情況下,當你執行 開始菜單→關機時,Windows 幹的其實是下面兩件事:

  • 一,退出當前用戶的會話,所謂的 Log off (Windows 10 起改名叫 Sign out,中文 Windows 翻譯成”註銷“)。註銷的效果,簡單說就是關閉所有前臺程序,但內核和後臺服務仍在運行。
  • 二,讓 Windows 休眠。

對,就這麼簡單。

我前頭說我愛上休眠功能時就分析瞭休眠喚醒為什麼比關機開機要快,然而很多人因為對於新事物的恐懼而不願意采用休眠代替關機,好瞭,現在微軟替他們做決定瞭,在不違背大眾通常使用習慣(關機+開機)的情況下,偷偷地用休眠/喚醒來提升他們關閉電腦/打開電腦的速度體驗。

我們知道的,從 Windows XP → Windows 7 → Windows 8 → Windows 10 一路走來,Windows 自帶的後臺服務也是逐步增多,用休眠代替關機,對於提速的效果是相當明顯的。

但請註意,你開啟瞭 Fast Shutdown,並不意味著 Windows 總是忠實地執行 Fast Shutdown。在 Windows 覺得有必要時,它完全可以執行 clean shutdown,比如,在 Windows 安裝瞭一些補丁包之後,有一些系統文件需要被替換,Fast Shutdown 是無法替換那些文件的,此時 Windows 就會轉而執行 clean shutdown。

此處我不禁聯想到一個問題,為什麼在內存條如此便宜的今天,市面上 95% 的 Windows 筆記本電腦搭配的內存都沒超過 8GB 呢? 我大膽的猜測是,大內存將顯著降低 混合睡眠 和 快速關機 的執行速度,帶給用戶不好的體驗。要知道,在 Windows 在執行休眠操作(指內存數據寫入硬盤休眠文件)時,你的電腦就是一塊發熱的磚頭,你對它什麼也做不瞭。你想立即喚醒它是做不到的,或說,休眠寫硬盤動作一旦開始便無法中途取消,你非得等休眠動作完成後才能喚醒。內存越大,用戶越容易撞到這個”喚不醒“的時間窗口,這並非好事。況且,你在休眠時屏幕並無顯示,用戶按電源鍵等待幾秒後喚不醒,會傾向於認為電腦卡死瞭。

【快速關機帶來的副作用】

這個副作用是:對 Windows 8+ 執行關機再開機,其效果不再等同於”重啟“。

具體影響是:當 Windows 內核自身、驅動程序、或後臺服務出現故障的情況下,Windows 8+ 執行關機再開機無法消除那些錯誤,因為休眠喚醒的過程中,Windows 內核、驅動程序、和後臺服務並未重新初始化。

如何親自驗證“快速關機”的效果不同於重新啟動?

現在我要舉一個例子,該例子具有非常典型的意義,它向我們展示,Windows 自身某些組件的功能也被 Fast Shutdown 給絆倒。該例子呈現的問題,在 Windows 10.1709 上依舊沒有被修復,而且也許微軟永遠不打算修復它瞭。

操作過程比較冗長,我專門開一個貼來記錄:你可知道,從 Windows 8 起,關機再開機並不等同於重新啟動

談談移動設備

想想 Windows 上那一大套的睡眠、休眠行話,而且還不時鬧出一點讓人困惑的問題,是否讓你覺得這個世界太復雜瞭?技術自身很復雜無法避免,但對於我們普通的技術產品消費者則是認知負擔。不是經常說科技以人為本嗎?確實有公司替我們著想瞭,蘋果公司的 iPhone/iPad 就是這樣的例子,它讓我們用戶感受到的設備工作狀態就兩種,工作、或睡眠。

iPhone/iPad 的頂部或右側有一個名叫 Sleep 的實體按鈕(當然,你叫它 Wake 也可以),讓我們明確地切換設備的工作與睡眠狀態。工作狀態時,按一下睡眠按鈕,設備熄屏,暗示我們它進入睡眠狀態瞭,再按一次,亮屏,設備喚醒回到工作狀態。當然,你可以要求你的設備閑置一段時間(人不去操作它)自動進入睡眠。

iPhone/iPad 內部用的操作系統都是 iOS,機理完全相同,為簡化文字,下面就隻說 iPhone 。

在繼續解釋前,我不得不引入一個新詞,熄屏狀態。按下 iPhone 的睡眠按鈕,你應該將其理解為讓 iPhone 在熄屏狀態和工作狀態間切換。我故意避開“睡眠狀態”這個用詞,是因為該詞在 Windows 系統和 iOS 系統中含義是不同的,避開它,能讓我的表達更清晰。熄屏狀態專門指按下 iPhone 按鈕後 iPhone 熄滅屏幕顯示的那種狀態。

iPhone 為什麼不需要 Windows 那般復雜的電源狀態概念呢?為瞭理解這個問題,我們還得回到電源狀態的本質。

回顧一下我前面提及的“極簡計算機模型”,我們可以將計算機設備的電源狀態抽象為考察兩個關鍵因素?

  • 一,內存(RAM)的信息是否保留,保留在何處?
  • 二,CPU 是否在執行指令?

問題一好回答,由於 iPhone 的電池是內置的,無法拆卸,因此我們完全可以認為 iPhone 內存中的信息是永久保留的,而且就保存在內存中,也無需寫入“硬盤”。

問題二,工作狀態時,我們可以直觀地認為 CPU 是在一直跑指令的,這樣的簡化理解是合適的。

復雜的地方在於熄屏狀態。你覺得熄屏狀態下 iPhone 的 CPU 停止跑指令瞭嗎?顯然不是,我們至少可以觀察到如下現象:

  • 如果你正在播放音樂,進入熄屏後,音樂會繼續播放,而且播完一首還會繼續播下一首。這說明 CPU 在熄屏狀態是有活動的。而 Windows 臺式機在睡眠狀態是絕對不可能給你播放音樂的。
  • 將 iPhone 連入 Wifi 網絡,熄屏前先用另一臺主機持續 ping 這隻 iPhone 的 IP 地址。進入熄屏後,你會發現 ping 仍是通的,大約持續 10 秒後才變得不通。這說明進入熄屏後的十多秒內 CPU 肯定在活動。如果你願意再觀察久一些,你會發現大約 10 分鐘左右 iPhone 又能被 ping 通 10 秒鐘。
  • 在熄屏狀態下,如果有一個 Facetime 呼叫請求進來,或是一條微信消息進來,你的設備會自動喚醒,進入工作狀態。說明熄屏狀態下 CPU 仍保持一定的活動性,這樣才能響應各種各樣的外界通知。

現在結論來瞭。在 iPhone 的熄屏狀態,iOS 系統會精巧地控制 CPU 的活動狀態,大多數時候讓它處於停止狀態,少數時候讓它處於運行狀態(執行指令)。此中顯然有一些預設的判斷原則:

  1. 如果一個程序要幹的事是在屏幕上繪制圖形,比如視頻遊戲,那系統將不給它分配 CPU 時間。因為此時是熄屏的,無需繪制。
  2. 如果一個程序的工作是播放音樂,則可以要求系統在熄屏狀態消耗一些 CPU 時間讓音樂繼續播放。
  3. 如果一個程序希望能在熄屏狀態彈出通知(微信消息之類),那麼它可以要求系統中負責監視網絡活動的代碼保持警覺,當有網絡通知到來時執行相應的動作。

通過停止執行不必要的任務,iPhone 就可以在熄屏狀態下達到相比於亮屏狀態下低得多的電力消耗,並且,整個系統看起來還是“活的”。也可以這麼理解,iPhone 的熄屏狀態是 Windows 工作狀態和睡眠狀態的混合體。

相比之下, Windows 的睡眠和休眠狀態(S1, S3, S4) 就是“死的”,除瞭非常少的幾個喚醒源(鍵盤、網卡)之外,睡眠中的整臺機器就像一塊磚頭一樣什麼也做不瞭。

不過呢,隨著移動時代的到來,微軟肯定也意識到瞭這個問題。 從 Windows 8 開始,Windows 引入瞭一種新的電源狀態,叫 S0 Standby,或 Modern Standby,原理和我上面分析的 iPhone 熄屏狀態一模一樣。該狀態在一些 Windows 平板電腦上實現瞭,比如 Surface Pro 3, 小米平板二代。

用 powercfg -a 可查得當前系統是否支持 Modern Standby 。 Modern Standby 又分兩種,一種是不帶網絡連接的,另一種是帶網絡連接的,後者在 進入熄屏狀態時可以被特定的網絡數據包喚醒(需要網卡硬件支持),後者也稱 Connected Standby。小米平板二代支持後者。

對於一臺 Windows 機器,我可以明確地要求它采取 S0 Standby 策略還是傳統睡眠策略嗎?答案是不行,目前看來,電腦的主板型號決定瞭它能支持哪一種睡眠策略;而且我還未發現某款機器能夠同時支持兩種策略的。

但目前不妙的是,Windows 平臺上的移動 App 生態系統很薄弱,S0 Standby 的實用性跟蘋果設備相比真是差太遠瞭,大多數用戶還是拿 Windows 來跑傳統的“桌面程序” ,在這種情況下,系統是支持 S0 Standby 還是傳統的睡眠幾乎不成為我們選購 Windows 電腦的考慮因素。

重新談談“待機”

現在回頭看看“待機”這個詞。這個詞發明得很妙,“待命中的機器”。待機,意味著我們當下並不急著使用該機器,而是讓它處於待命狀態,當我們稍後隨時需要使用它時,我們可以立即使用。想想看什麼場景可以稱作待機。

  • 我們坐在開啟的電腦屏幕前,什麼都不做,電腦是否在在待機呢?當然,當我們想用它時,伸手敲敲鍵盤、動動鼠標,就可以開始用瞭,一秒鐘都不用等待。
  • 我們讓 Windows 電腦進入睡眠狀態,它是不是在待機呢?當然也是,隻不過我們需要 2~3 秒來喚醒它罷瞭,總比重新開機花上一分鐘好得多。
  • iPhone/iPad 進入熄屏狀態後,算是待機嗎?更是瞭。我們可以隨時喚醒它。

這麼多場景都可以叫待機,難怪 Windows XP 之後微軟就不再用待機這個含糊的提法瞭(除瞭 S0 Standby 這個給程序員的專用術語外),英文和中文通通改瞭。蘋果的官方用語中也幾乎不出現 Standby 這種提法。

按照我前頭的分析,“待機”的核心意思在於,從人想要用一個設備,到這個設備真正可用所需的等待時長。如果時長足夠短,我們就可以將先前那個狀態稱為待機。

隨著電子產品的進步,待機這個詞的表達力顯然是不夠的。我們還會關心另外兩個維度的因素:

  1. 待機狀態下的設備有多省電?
  2. 待機狀態下的設備還保有多少的活動性?

在這兩個維度下,蘋果的 iOS 比微軟的 Windows (包括已經沒落的 Windows Mobile)領先瞭整整一個時代。這也多虧瞭蘋果的軟硬件一體策略,才能將整套系統的電源管理設計得那麼漂亮。

END (初稿:2018.10.17)

赞(0)