2017-08-17 49 views
0

當我在這裏談論暫停問題時,聽起來好像不可終止是需要避免的,暫停問題使得不可能知道程序/算法是否好。非確定性運行時間真的很糟糕嗎?

但是,當我仔細想想,不終止程序的異常,沒有規則?我可以想到一類應用程序在預計在有限的時間內終止:編譯器。從我正在使用的Web瀏覽器到桌面環境,文本編輯器,shell,服務器託管SO,到操作系統本身,其他一切都不應該自行終止。哎呀,即使是包管理者也應該要求用戶確認。除非用戶或系統管理員另有說明,否則它們都旨在無限期地繼續運行。

我的觀點是,真的有那麼糟糕,你無法證明的東西會終止?如果有的話,證明某些東西將在有限的時間內退出將是更多的錯誤,而不是相反。

回答

0

我看到你的邏輯,但同時這些程序你提到一個無限循環運行,直至終止您可以隨時使用退出功能還是終止它們。非確定性終止的問題在於,您不知道程序何時會釋放其正在執行的操作的控制權,以便可以終止它。

請考慮這一點。你寫一個程序完成一個循環,並開始循環。每個週期與程序終止相似。但不是關閉程序,而是要求重新開始。如果您在該程序中對函數調用進行無限循環,那麼程序會在該函數中注意有效地防止所有其他功能,直到該循環完成。提示,從不。這被用戶認爲是程序凍​​結。

+0

我想我的觀點是,詢問是否有一個機制,以確定是否在程序終止無意義如果程序花費大量的時間等待被告知要終止。 – Angeldude

0

一個程序的終止是不可的地步。這只是一個容易解釋計算終止的情況。這裏有一個實際的例子:

當你訪問一個網頁,就可以開始運行一些JavaScript。根據代碼嵌入頁面的方式,您可能必須等待此腳本在網頁完全顯示之前終止。如果腳本沒有一定的時間限制內終止時,你會得到這樣的消息:

Kill script dialog

(Chrome的對話框如圖)

你應該以某種方式決定是否腳本正在取得進展,如果給予更多時間,或者如果它陷入無限循環,將會完成。你可能不知道答案,所以你猜。你等到你厭倦了等待,然後放棄並殺了它,不知道它是否僅僅是當你按下按鈕時的完成秒數。

Chrome並未告訴您腳本無望地被卡住,並且不會終止,因爲檢測到無望卡住的腳本需要解決暫停問題

而且它不只是頁面加載。 Javascript(在Web客戶端上下文中)是事件驅動的。當外部事件發生時(即,您單擊表單提交按鈕),該函數將被調用,並且該函數在函數返回(終止)之前不會被處理。非終止腳本是一個大問題。

+0

另外這裏有一些我最近運行的程序,適合於「啓動,做好工作,終止沒有用戶交互」範例:' gunzip pngtopnm xtermset mysqldump'。這不僅僅是編譯器...... –

相關問題