通過合理建立任務(或執行緒)的方式,可以有效地提高軟體設計的模組性。通過讓乙個任務關注於某一類事務,有助於簡化任務體函式的實現,以及提高程式的可維護性。另外,多工在不少情形下,將提高系統的執行效率,因為乙個任務在等待所需資源時,另乙個任務可以利用處理器做更多的事。儘管多工有它的好處,但使用多工的「度」很重要。就作者的觀察,多工設計方法大有被濫用之勢,乃至有的工程師習慣於一做設計就想到運用多工。出現這種狀況的原因,是因為沒有意識到多工設計所帶來的問題。
運用多工的設計方法,往往需要使用到任務同步的方法(互斥鎖、訊號量、事件和訊息佇列等),以保證多個任務有序地協同工作,以便避免出現競爭問題。但是,使用任務同步的方法並不是每個人都很擅長,乃至即使覺得自己很擅長,也很容易一糊塗就設計出存在競爭問題的**。再則,對於大型專案,由於**量的急劇增長,多工所帶來的競爭問題更加不容易被發現,一旦發生問題就相對嚴重,而且不容易查錯。
任務數量使用得過多,所帶來的另乙個問題是,因為多個任務的存在,將帶來更多的任務切換。也因為任務過多,而使得任務之間的通訊開銷更大。總的來說是,有可能造成系統效能問題。
作者也經歷了從大量使用多工設計到回歸避免使用多工的成長歷程,也明白在很多情形下,採用多工設計的衝動源於賣弄自己具備多工的程式設計能力,以及愧疚於不採用多工會造成系統效能問題。其實,一旦我們冷靜下來思考多工設計時會發現,自認為多工所帶來的好處,在系統中很可能並不是關鍵。另外,我們也很有可能沒有考慮採用多工設計所帶來的不良***。
從使用者的體驗來看,乙個軟體產品最終必須具備良好的魯棒性,即穩定。否則,無論多麼好的功能特性,產品最終都將被使用者給拋棄。因此,軟體在開發活動中的主旨之一,應是採用容易獲得高質量的方法,而不是運用更多的「高科技」。這種策略,允許適當地降低對團隊能力的要求,畢竟,要獲得乙個能力都非常強的團隊不是一件易事。
無論如何,當我們考慮運用多工設計時,靜下心來思考一下它所帶來的利與弊,有助於我們克服魔鬼般的衝動。一旦考慮清楚了應當採用多工設計,那還是應當勇往直前。
最後,即使是使用更少的任務,也並不妨礙軟體的模組化設計。因為通過設計,完全可以實現模組與任務相分離,也就是即使不採用多工,同樣可以獲得良好的軟體模組化。
本文出自 「至簡李雲」 部落格,請務必保留此出處
小心多工設計被濫用
通過合理建立任務 或執行緒 的方式,可以有效地提高軟體設計的模組性。通過讓乙個任務關注於某一類事務,有助於簡化任務體函式的實現,以及提高程式的可維護性。另外,多工在不少情形下,將提高系統的執行效率,因為乙個任務在等待所需資源時,另乙個任務可以利用處理器做更多的事。儘管多工有它的好處,但使用多工的 度...
小心多工設計被濫用
通過合理建立任務 或執行緒 的方式,可以有效地提高軟體設計的模組性。通過讓乙個任務關注於某一類事務,有助於簡化任務體函式的實現,以及提高程式的可維護性。另外,多工在不少情形下,將提高系統的執行效率,因為乙個任務在等待所需資源時,另乙個任務可以利用處理器做更多的事。儘管多工有它的好處,但使用多工的 度...
uc OS II 多工設計
uc os ii 多工設計 1 設計 開始任務 1 宣告 開始任務 任務塊 設定任務的優先順序 設定任務塊大小 編寫 任務函式 開始任務函式 在main函式中建立開始任務 ostaskcreate void 0,2 其他任務函式編寫 1 設定優先順序和任務塊大小 設定任務的優先順序 設定任務塊大小 ...