2017-09-05 27 views
0

在阻塞的世界中,強烈建議設置激進的超時以便快速失敗並釋放底層資源(https://pragprog.com/book/mnee/release-it的第5.1節)。在反應式編程中使用激進超時的好處

在異步/非阻塞的世界中,請求不會阻塞主線程,並且資源立即可用於進一步處理。超時仍然是必要的,但是設置激進值還是有意義的嗎?

+1

無論如何都需要超時。例如,讓我們假設你在網絡中做了一些事情;無論是異步還是非阻塞都無所謂,你永遠不會知道結果......所以你希望建立一個窗口,讓事情被視爲成功與否。 –

回答

1

在實時軟件中,機器上的網絡請求或控制操作與日常軟件操作相比需要大量時間。例如,告訴步進電機前進到特定位置可能需要幾秒鐘,而正常操作可能需要幾毫秒。假設典型的步進電機前進需要n毫秒,而最大距離需要的時間爲m毫秒。

積極超時會計算出n並增加一個小巧的因素,可能是10%,如果在那段時間內沒有達到目標,就會很快失敗。如您所述,積極超時將允許您釋放資源。 m加上epsilon的非積極超時會失敗得慢得多,並且不必要地佔用資源。

在異步軟件世界中,成功與失敗之間還有其他許多選擇。異步操作也可能會計算出n加上10%,並建立一個進度條(如果需要用戶反饋),然後向估計的目標結束時顯示進度。達到超時時,進度條會變滿,但您可能會導致它發生脈衝或改變顏色,以指示其花費的時間比預期的要長。如果步進電機在m毫秒後還沒有達到目標,那麼您可以宣佈失敗。

在其他情況下,如果反饋並不重要,那麼您肯定可以使用m加上epsilon作爲超時。

相關問題