2009-05-27 30 views
8

那天剛剛打我。當我告訴計算機進入待機或休眠狀態時會發生什麼?待機和休眠期間會發生什麼?

更特別的是,它對正在運行的代碼有什麼影響?例如,如果應用程序正在壓縮某些文件,編碼視頻文件,檢查電子郵件,運行數據庫查詢,生成報告或僅處理大量數據或執行復雜的數學工作。怎麼了?你最終會在視頻中出現錯誤嗎?數據庫查詢能否失敗?數據處理最終是否包含錯誤?

我問這兩個出於一般的好奇心,但也因爲我開始懷疑這是我應該考慮什麼時,我自己編程。

回答

6

你應該記住操作系統(調度程序)每秒鐘凍結你的程序大約幾十億次。這意味着當操作系統凍結它時,你的程序已經可以很好地運行。從你的角度來看,在待機,休眠和上下文切換之間沒有太大的區別。

不同的是,你會被凍結很長一段時間。這是你需要考慮的唯一事情。在大多數情況下,這不應該是一個問題。

如果您有網絡連接,您可能需要重新建立網絡連接以及類似的問題。但這只是檢查所有IO操作中的錯誤,我相信你已經在做...... :-)

2

備用通過將其保存在RAM中使您的「狀態」保持活動狀態。因此,如果你失去了權力,你會失去你存儲的「狀態」。

但它使它更快實現。

休眠狀態將您的「狀態」存儲在硬盤上的虛擬RAM中,因此如果您斷電,您仍然可以在三天後回來。但速度較慢。

我想待機的限制是你有多少內存,但是我確定當標準內存用完時,虛擬內存必須被備用內存使用。我會再看看,然後回來!

+0

我們計算機休眠,它只是將RAM的內容寫入磁盤。下次啓動時,它會從磁盤恢復RAM的內容。當操作系統用完標準RAM時,它將東西寫入磁盤,這就是所謂的分頁:) – Philippe 2009-05-27 07:50:27

+0

而且,當計算機運行正常時,AFAIK也會發生分頁(如果你用完RAM) – Svish 2009-05-27 07:58:13

+0

@Philippe - 這就是我所說的;休眠需要你的RAM的內容,並將其放在硬盤上 – joshcomley 2009-05-27 08:38:38

1

維基百科關於ACPI的文章包含了關於不同功耗節省模式的詳細信息,這些模式存在於現代PC。

這裏的基本思路,從我所理解的東西:

的基本思路是,以保持系統的當前狀態繼續存在,因此當機器重新投入運行,它可以在狀態時,它恢復在機器進入睡眠/待機/休眠狀態之前等。將它想象爲您的PC的序列化。

在待機狀態下,計算機將繼續向RAM供電,因爲主存儲器爲volatile memory,需要恆定的refreshing來保持其狀態。這意味着只要有足夠的電力來保持DRAM刷新以防止內容消失,就可以關閉硬盤驅動器,CPU和其他組件。

休眠狀態下,主存儲器也將被關閉,因此在關閉系統電源之前,必須將內容複製到永久存儲器(如硬盤驅動器)中。除此之外,休閒的基本前提與待機沒有區別 - 存儲機器的當前狀態以在稍後恢復。

考慮到這一點,進入待機或休眠狀態可能不會導致目前正在執行的任務出現問題。但是,根據協議,允許網絡活動在執行過程中停止可能不是一個好主意,您的網絡連接可能會超時,並且在系統返回到運行狀態時無法恢復。另外,可能有一些機器只有片狀節能驅動器,可能會導致它進入待機狀態並且不會再回來,但這完全是另一個問題。

3

我最初的想法是,只要你的程序和它的生態系統包含在正在進行待機或休眠的電腦中,那麼在恢復時你的程序不應該受到影響。

但是,如果您要更新某個獨立機器上託管的數據庫中的記錄,則休眠/待機將被視爲超時。

如果你的程序是依賴於「電源狀態」這樣的變化對msdn

0

提到有你的代碼中的一些影響,你可以聽WM_POWERBROADCAST消息。休眠不僅僅是調度程序的上下文切換。網絡連接將關閉,網絡驅動器或可移動媒體可能在休眠期間斷開,...

我不認爲你的應用程序可以被通知冬眠(但我可能是錯的)。你應該做的是儘可能優雅地處理錯誤場景(例如網絡連接的丟失)。並且請注意,這些錯誤情況也可能發生在正常操作期間,不僅在進入休眠狀態時...