書名: 云計算通俗講義(第3版)作者名: 王良明本章字數(shù): 3159字更新時間: 2019-06-19 17:35:54
2.1 軟件的概念
軟件,也叫程序,那么究竟什么是軟件?在回答這個問題之前,先來看下面的例子。
老李要求他的癡呆兒子(下稱小李)在一張紙上畫三角形并計算出三角形的面積。老李準備了兩張白紙:一張白紙上標注了三個點:A點、B點和C點,以及每個點的坐標;另一張白紙上寫下了畫三角形的步驟和計算三角形面積的方法。小李只要按照這些步驟和計算方法動手即可。步驟如下:
(1)畫一條直線連接A點和B點。
(2)畫一條直線連接A點和C點。
(3)畫一條直線連接B點和C點。
(4)根據(jù)下面的公式計算三角形的面積并寫在紙上:
(xayb+xbyc+xcya?xayc?xbya?xcyb)÷2
(5)把那張畫了三角形并標注了面積的紙張交回給老李。
老李把這兩張紙交給小李后,小李在書桌上攤開這兩張紙開始工作。大概過了十分鐘,老李得到了一張畫好三角形并標注了面積的紙張,任務完成,如圖2-1所示。

圖2-1 畫三角形并計算面積(1)
現(xiàn)在把小李比喻成計算機的CPU(中央處理器),繪制三角形的步驟就是軟件,一個步驟就是一條指令(語句),老李就相當于程序員,而那張畫了三角形并標注了面積的紙張就相當于軟件的輸出(在屏幕上顯示或者打印出來),“畫一個三角形并計算面積”就是軟件要完成的任務(程序要處理的數(shù)據(jù))。
幾天后,老李要畫更多形狀不同的三角形并計算出各自的面積,如果還是按照原來的方式,那么針對每個三角形,老李都要給小李提交兩張紙,一張紙標明三個點,另一張紙寫明步驟。這樣做一方面浪費了紙張,另一方面增加了工作量。于是老李想出了一個辦法,只交給小李一張寫有步驟的紙張,畫一個三角形并計算面積的步驟改為:
(1)詢問A點的坐標。
(2)詢問B點的坐標。
(3)詢問C點的坐標。
(4)畫一條直線連接A點和B點。
(5)畫一條直線連接A點和C點。
(6)畫一條直線連接B點和C點。
(7)根據(jù)下面的公式計算三角形的面積并寫在紙上:
(xayb+xbyc+xcya?xayc?xbya?xcyb)÷2
(8)把那張畫了三角形并標注了面積的紙張交回給老李。
這樣小李收到老李遞過來的紙張后,先詢問老李三角形的三個頂點的坐標,然后再去畫三角形并計算面積,如圖2-2所示。

圖2-2 畫三角形并計算面積(2)
現(xiàn)在不只是老李,任何人只要復印那張寫了步驟的紙張,都可以叫小李畫出任何他們想要的三角形,只不過小李在畫三角形前要詢問頂點的坐標。繼續(xù)把這些步驟比喻成軟件,那么相對于前面的軟件,這次增加了三條輸入語句,用戶在運行這個軟件時,要用鍵盤輸入三角形的三個頂點的坐標,然后就會在屏幕上看到一個三角形及這個三角形的面積。
至此,我們總結出這個軟件已經(jīng)具備如下特征。
完成任務:畫三角形并計算面積。
輸入數(shù)據(jù):頂點坐標。
輸出結果:三角形及三角形的面積。
指令集:詳細定義畫一個三角形的步驟和計算三角形面積的方法。
指令集保存在一個文件中,這個文件就叫可執(zhí)行程序,允許存放在硬盤、U 盤、光盤或者網(wǎng)盤中,可以任意復制和傳播。比如,Windows 操作系統(tǒng)中的“計算器”這個程序(指令集)保存在硬盤上的C:\Windows\ system32\calc.exe文件中,用鼠標雙擊它或者單擊“開始”→“所有程序”→“附件”→“計算器”,即表示命令 CPU 現(xiàn)在就按照里面的步驟進行操作(專業(yè)術語叫執(zhí)行指令)。
最后,我們通俗地定義一下軟件:由程序員寫的需要讓CPU來完成某項任務的步驟。只不過這些步驟是用計算機語言來描述的。常見的計算機語言有 C 語言、C++、Java、PHP、Go 等,編程人員必須嚴格按照計算機語言的語法規(guī)則來寫程序,如下面用C語言語句實現(xiàn)的加法運算。

上面左側灰色框內(nèi)就是程序員用 C 語言寫的兩個數(shù)相加的程序語句,右側是說明信息。
軟件必須包含輸入/輸出語句和計算語句,沒有包含輸入/輸出語句的軟件沒有任何用途,因為它就像一個黑盒子,既不能輸入任何東西,也不能從它那里得到任何東西。在這里,我們要澄清兩個概念:實時輸入/輸出和批量輸入/輸出。實時輸入/輸出是指CPU執(zhí)行輸入/輸出步驟時,立即完成輸入/輸出動作;而批量輸入/輸出是一次性輸入全部的信息,一次性輸出全部的計算結果。大部分計算機軟件,如辦公軟件,都要求實時輸入/輸出;絕大部分網(wǎng)站都是批量輸入/輸出的,比如注冊一個在線免費郵箱,我們要一次性輸入全部的注冊信息,然后再單擊“提交”按鈕,送出全部的輸入信息。
實時輸入/輸出軟件可進一步劃分為強交互性軟件和弱交互性軟件兩種,強交互性軟件是指在運行時需要實時地進行大量輸入/輸出操作,且輸入之后馬上能看到輸出結果;而弱交互性軟件是指軟件運行時實時地進行少量的輸入操作,然后就源源不斷地輸出了。屬于強交互性軟件的有:微軟的辦公軟件(Word、Excel、PowerPoint)、記事本、QQ、Photoshop、AutoCAD,金山的辦公軟件WPS、金山詞霸,Visual Studio、Eclipse、Vim等,共同特點是用鍵盤輸入的內(nèi)容馬上能在屏幕上顯示出來;而下面這些軟件屬于弱交互性軟件:酷狗音樂播放器、Adobe Reader、家庭相冊、迅雷下載等,共同特點是在程序運行初期只需輸入少量信息,然后就源源不斷地輸出了。
在規(guī)劃云計算方案時,要特別關注軟件的輸入/輸出是實時的還是批量的。如果是實時的,那么還要進一步區(qū)分是強交互性的還是弱交互性的。對于實時的強交互性軟件,有兩種解決方法:(1)計算機網(wǎng)絡的延時控制在合理的范圍內(nèi)(一般要小于100毫秒),解決方法是就近部署云計算分支中心。如果延時過大,那么當使用諸如Word等辦公軟件時,需要等一會兒才能在屏幕上看到剛才用鍵盤輸入的字符,用戶體驗很差。(2)改造軟件以便能通過網(wǎng)頁瀏覽器訪問,用戶只與本地的網(wǎng)頁瀏覽器進行實時輸入/輸出交互,而網(wǎng)頁瀏覽器與“云”中軟件進行批量輸入/輸出傳輸,使用瀏覽器改造強交互性軟件如圖2-3所示。

圖2-3 使用瀏覽器改造強交互性軟件
計算機網(wǎng)絡延時的概念在2.3節(jié)會詳細介紹。
最后,我們用圖2-4來表示一個軟件運行模型。

圖2-4 軟件運行模型
一個軟件以文件的形式保存在硬盤上,當我們用鼠標雙擊它時,這個軟件就被讀取到內(nèi)存中,此后CPU就按照里面的步驟一步步執(zhí)行。執(zhí)行到一些輸入步驟時,就要從輸入設備上獲取信息(常見的輸入設備有鍵盤、鼠標、掃描儀、話筒、攝像頭、網(wǎng)絡等);執(zhí)行一些計算步驟時,要用到計算設備;執(zhí)行輸出步驟時,把計算的結果通過輸出設備輸出(常見的輸出設備有計算機顯示器、打印機、繪圖儀、音箱、耳機、網(wǎng)絡、機械手等)。對于一些較大的軟件,不一定就是按照“輸入—計算—輸出”的順序進行的,在軟件執(zhí)行的過程中,隨時可能需要輸入,也隨時可能會輸出,計算步驟也可能安排在任意時刻。
注意:硬盤上的文件既可以作為輸入設備,也可以作為輸出設備。例如,編輯一個已經(jīng)存在的PPT文檔,首先作為輸入設備,PPT文檔中的內(nèi)容被讀取到內(nèi)存,編輯完成后保存時又作為輸出設備,內(nèi)存中被修改的內(nèi)容又被寫入這個PPT文檔中。計算設備一般指CPU、內(nèi)存、存儲器(硬盤屬于最典型的存儲設備)和網(wǎng)絡,為什么網(wǎng)絡也算計算設備呢?在云端運行一個分布式應用程序時,網(wǎng)絡是必需的。換個角度來看,計算設備就是程序運行時需要使用的資源——計算資源。硬盤上的PPT文檔本身不是程序,只是用于輸入/輸出的數(shù)據(jù)文件,雙擊它能打開進行編輯,實際上運行了微軟的辦公軟件中的powerpoint.exe程序,因為在安裝辦公軟件時自動建立了數(shù)據(jù)文件和程序的關聯(lián),建立好關聯(lián)之后,只要雙擊數(shù)據(jù)文件,就能運行關聯(lián)的程序。
最后我們總結一下本節(jié)的知識點:
(1)軟件是由程序員寫的讓CPU來完成某項任務的步驟。
(2)這些步驟包括輸入/輸出步驟和計算步驟兩大類。
(3)輸入/輸出步驟要使用輸入/輸出設備,計算步驟要使用計算設備,計算設備也稱為計算資源。
(4)鍵盤和鼠標是最常見的輸入設備,顯示器和音箱是最常見的輸出設備,CPU、內(nèi)存、存儲器和網(wǎng)絡統(tǒng)稱為計算資源。
(5)軟件平時保存在硬盤中,但必須讀取到內(nèi)存中去執(zhí)行,一個軟件可以被多次執(zhí)行。
計算設備和輸入/輸出設備的分離是云計算的特征之一。也就是說,對于云計算而言,計算設備位于遠方的云端,而輸入/輸出設備就在眼前。究竟如何分離計算設備和輸入/輸出設備,請看后續(xù)章節(jié)。
- Python快樂編程:人工智能深度學習基礎
- Mastering Spring MVC 4
- FFmpeg入門詳解:音視頻流媒體播放器原理及應用
- Python Tools for Visual Studio
- Windows Server 2012 Unified Remote Access Planning and Deployment
- Visual C++數(shù)字圖像處理技術詳解
- 深入淺出PostgreSQL
- Microsoft Azure Storage Essentials
- Django實戰(zhàn):Python Web典型模塊與項目開發(fā)
- Lift Application Development Cookbook
- Raspberry Pi Blueprints
- Head First Kotlin程序設計
- iOS Development with Xamarin Cookbook
- 算法精解:C語言描述
- 一覽眾山小:ASP.NET Web開發(fā)修行實錄