小心多任务设计被滥用
通過合理創建任務(或線程)的方式,可以有效地提高軟件設計的模塊性。通過讓一個任務關注于某一類事務,有助于簡化任務體函數的實現,以及提高程序的可維護性。另外,多任務在不少情形下,將提高系統的運行效率,因為一個任務在等待所需資源時,另一個任務可以利用處理器做更多的事。盡管多任務有它的好處,但使用多任務的“度”很重要。就作者的觀察,多任務設計方法大有被濫用之勢,乃至有的工程師習慣于一做設計就想到運用多任務。出現這種狀況的原因,是因為沒有意識到多任務設計所帶來的問題。
運用多任務的設計方法,往往需要使用到任務同步的方法(互斥鎖、信號量、事件和消息隊列等),以保證多個任務有序地協同工作,以便避免出現競爭問題。但是,使用任務同步的方法并不是每個人都很擅長,乃至即使覺得自己很擅長,也很容易一糊涂就設計出存在競爭問題的代碼。再則,對于大型項目,由于代碼量的急劇增長,多任務所帶來的競爭問題更加不容易被發現,一旦發生問題就相對嚴重,而且不容易查錯。
任務數量使用得過多,所帶來的另一個問題是,因為多個任務的存在,將帶來更多的任務切換。也因為任務過多,而使得任務之間的通訊開銷更大。總的來說是,有可能造成系統性能問題。
作者也經歷了從大量使用多任務設計到回歸避免使用多任務的成長歷程,也明白在很多情形下,采用多任務設計的沖動源于賣弄自己具備多任務的編程能力,以及愧疚于不采用多任務會造成系統性能問題。其實,一旦我們冷靜下來思考多任務設計時會發現,自認為多任務所帶來的好處,在系統中很可能并不是關鍵。另外,我們也很有可能沒有考慮采用多任務設計所帶來的不良副作用。
從用戶的體驗來看,一個軟件產品最終必須具備良好的魯棒性,即穩定。否則,無論多么好的功能特性,產品最終都將被用戶給拋棄。因此,軟件在開發活動中的主旨之一,應是采用容易獲得高質量的方法,而不是運用更多的“高科技”。這種策略,允許適當地降低對團隊能力的要求,畢竟,要獲得一個能力都非常強的團隊不是一件易事。
作者曾在一個項目中,開發出了一個運行于Linux操作系統之上的、基于TCP套節字的網絡通訊框架,采用的是單線程的設計思想。這個框架通過采用select()函數,可以處理多個套接字的建鏈和通訊。在設計的過程中,由衷地感嘆采用單線程的方式大大地簡化了設計和調試工作。當作者將這一設計思路與一些同事交流時,他們所表現出來的不理解卻大相徑庭。因為在他們看來,套接字通訊無論如何也得考慮用多線程的設計方法。有一點需要交代一下,作者采用單線程的設計方法,也是基于應用場景并不存在大負荷的通訊數據。
無論如何,當我們考慮運用多任務設計時,靜下心來思考一下它所帶來的利與弊,有助于我們克服魔鬼般的沖動。一旦考慮清楚了應當采用多任務設計,那還是應當勇往直前。
最后,即使是使用更少的任務,也并不妨礙軟件的模塊化設計。因為通過設計,完全可以實現模塊與任務相分離,也就是即使不采用多任務,同樣可以獲得良好的軟件模塊化。
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的小心多任务设计被滥用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解析 WordPress 插件机制
- 下一篇: java编程思想 学习笔记(2)