软件也叫程序,要理解软件的概念,不妨先看下面这个例子——老李想画一个三角形并计算出面积,他找了小李帮忙,交给他一张纸,上面写着这些步骤:
小李收到了这张纸后,询问了老李三角形三个顶点的坐标,然后在书桌上摊开纸开始工作,他画出三角形并计算面积后把纸交给了老李,任务完成。
如果我们将老李比喻成程序员,小李比喻成计算机的CPU(中央处理器),那么书桌就是内存,三角形三个顶点的坐标是三条输入语句,绘制三角形并计算面积的步骤就是软件,一个步骤就是一条指令(也叫语句),画了三角形并标注了面积的纸就相当于软件的输出,“画一个三角形并计算面积”就如软件要完成的任务(也叫程序要处理的数据)。
通俗地来说,软件就是由程序员写的需要让CPU来完成某项任务的步骤,只不过这些步骤是用计算机语言来描述的(常见的计算机语言有C、C++、Java、PHP、Go等)。
为了能够更加直观地理解软件的运行原理,我们用下面这张图表示一个软件:
一个软件以文件的形式保存在硬盘上,当我们用鼠标双击它时,这个软件就被读到内存,此后CPU按照里面的步骤一步步执行。执行到输入步骤时需要从输入设备上获取信息(键盘和鼠标是最常见的输入设备),然后执行一些计算步骤(CPU、内存和硬盘一起组成计算设备),最后执行输出步骤,把计算的结果通过输出设备输出(显示器和音箱是最常见的输出设备)。对于一些较大的软件,在软件执行的过程中,随时可能要输入,也随时可能会输出,计算步骤也可能安排在任何时候。
计算设备和输入/输出设备的分离是云计算的核心特征。要明白他们是如何分离的,我们需要了解下一个概念 —— 网络。