多任務編程超入門-(1) 什麼是多任務

多任務可以說是編程中的一個難點,對於非計算機專業的開發者來講,尤其如此。本系列希望可以用盡量淺顯的語言對多任務編程進行說明,在滿足多任務編程基本要求的同時,提供繼續深入研究提供一個良好的出發點。

我們的文章首先一一個單核CPU的情況為前提進行說明。

什麼是多任務

從用戶觀點來看就是計算機同時做幾件事。主要有兩種情況,一種是播放視頻的同時可以寫博客,敲代碼的同時可以下載文件等,這屬於多個應用同時執行的情況;另一種情況,如果我們觀察視頻播放器,在播放視頻時可以操作停止按鈕,這屬於一個應用內部的多任務。

從程序員觀點來看,就是計算機同時執行多段代碼。這裡用一個不太嚴謹的示意圖來說明程序員的觀點的單任務和多任務,假設兩件事情需要處理,分別是TASK1,TASK2。

在單任務執行時,首先執行TASK1,當TASK1結束以後,執行TASK2。如果是多任務執行的話,就是TASK1和TASK2交替執行。

所謂不嚴謹指的是在實際的系統中:

1.任務塊的劃分不一定均勻

2.執行的次序不一定嚴格交替

3.執行間隔不一定

為什麼需要多任務

有一個錯誤的理解是提高系統的效率,應該說這是一個不準確的說法,從執行時間的來講,需要做的工作沒有減少,當然佔用CPU的時間就不會減少。不僅如此,多任務執行時多了TASK間調度的操作,實際上執行時間還是會略有延長的。

那麼多任務執行的意義在哪裡呢?

通過上圖可以看出,雖然總的時間沒有變化,每個任務的執行間隔變短了,換句話說相應快了。如果間隔足夠短(例如數10毫秒),從宏觀上看,就好像兩個任務都在同時執行。都能對輸入進行及時地處理了。

換一種說法,如果存在需要至少一個對外部要求快速反應的任務時,多任務是一種有效的解決方案。否則沒有必要引入多任務。

實現多任務的方式

程序員自己實現

將兩個任務拆分為小的段落,通過程序控制任務的交替執行。這種方式的缺點是程序會變得很複雜,增加任務或者調整任務的內容時的維護會非常麻煩。當然也有好處,這種方式不要求系統支持多任務,適用於單任務系統甚至是裸機上執行的程序。

通過操作系統實現

每 個任務作為單獨的程序來設計和實現,任務之間的調度利用操作系統的功能來實現。這種做法的好處是最大限度保持任務之間的獨立性,使增加任務或者調整任務內 容變得簡單。雖然這種方式可能增加系統開銷,但是在目前軟體/硬體成本都在不斷下降的大環境下,這種方式已經成為主流。

本連載說明的內容就是通過操作系統實現多任務的情況。

寫在文章的最後

既然已經讀到這裡了,拜託大家再用一分鐘時間,將文章轉發到各位的朋友圈,微信群中。

本公共號的成長需要您的支持!

以上就是今天的文章,歡迎點贊並推薦給您的朋友!

閱讀更多更新文章,請關注【面向對象思考】微信公眾號!


推薦閱讀:

EA&UML日拱一卒--序列圖(Sequence Diagram)::連續
類圖::添加操作和方法
EA&UML日拱一卒--活動圖::對象流
EA&UML日拱一卒--活動圖::活動(續)
Python實用技巧——類,屬性與裝飾器

TAG:面向對象編程 | 面向對象分析與設計 |