美文网首页敏捷软件开发
疾风式全栈教程(1)-计算机结构介绍

疾风式全栈教程(1)-计算机结构介绍

作者: 码农田伟 | 来源:发表于2018-05-01 14:59 被阅读19次

    终于决定自己写技术教程了. 当然不是为了重复造轮子, 我想致力于理清关键细节. 就像是说, 只要拧好哪几颗螺丝就可以把轮子装到车上, 能够跑起来.

    想了好多应该从哪里开始, 算筹, 算盘, 还是手摇计算机, ENIAC. 后来还是决定从经典的冯诺依曼体系开始, 既深刻又实用.

    很多人不喜欢学习理论, 想直接上干货. 其实我也喜欢简单实用, 直接上手. 但是有深度的理论确实可以帮助人理清思路. 当然复制粘贴凑字数的无聊理论也有很多. 大家可以自己判断和选择. 知识不一定是力量, 只有成为解决方案, 投入使用才有价值.

    冯诺依曼体系就是关于计算机结构的一个概括.

    尽管很多书上没有显式指出传输系统, 但是传输非常重要. 就是图中那各种线. 不光是计算机内部的传输, 现在的网络时代, 网络的重要性可能超过了计算机. 所谓的控制器, 运算器, 存储器, 输入输出, 都可以看成是网络的一部分. 云计算的理念就是, 网络就是计算机.

    而控制器和运算器, 在计算机中也是合成为一部分出现的, 就是我们常说的中央处理器, 简写为CPU.

    所以, 我们重新整理一下, 计算机系统可以分成四部分 

    处理  存储  IO  传输

    这些是计算机技术的关键.

    在硬件上, 这四部分对应:

    - CPU 包括各种控制和运算的芯片

    - 存储设备 包括存储芯片(内存, 闪存, SSD), 磁盘(硬盘, 软盘), 光盘, 以及存储阵列, NAS, SAN等各种高大上的存储

    - IO设备 输入的有键盘, 鼠标, 麦克风, 摄像头, 扫描仪, 手写板, 输出的有显示器, 音响, 打印机等等.

    - 传输设备 包括计算机内部的电路板, 总线, 以及众多的网络设备.

    在软件上, 这四部分对应:

    - 操作系统 以及处理各种底层的运算和控制的软件, 包括我们自己开发的软件中负责处理运算和逻辑的部分.

    - 数据库 包括一般由操作系统负责的文件系统和内存管理, 以及各种能把数据保存下来的持久和非持久的储存技术.

    - 交互 接收用户输入, 把结果返回给用户.

    - 通信 软件内部的组织沟通, 以及和其他软件, 其他计算机的交流.

    所以, 经过时间和市场的检验, 在计算机行业活下来的是这样几种公司,

    硬件厂商:

    做芯片的, 如Intel, 

    做存储的, 如希捷, 

    做外部设备的, 如三星, 

    做网络设备的, 如华为.

    软件厂商:

    做操作系统的, 如微软, 

    做数据库的, 如oracle, 

    做UI交互界面的, 如adobe, 

    做网络的, 如google.

    而技术的重点其实在两端, 一是保护用户的数据, 二是提供良好的用户交互. 中间的传输和处理都是辅助. 用户感受不到, 也不应该让用户感受到. 技术应该尽可能的封装内部和底层的细节, 让用户透明的使用. 技术的最终目标是要让用户满意, 为用户创造价值.

    而数据, 或者叫信息, 在不同的场合也会有不同的表现形式.

    运算 以二进制的形式存储在CPU寄存器或者cache(缓存)中, 以求高效处理.

    存储 在内存中, 以链式和线性数据结构存储, 在持久化存储时, 采用关系或图等格式, 要求存储密度高, 而且规范便于查询存取, 大量密集和格式化的休息, 如同字典或仓库.

    传输 采用json或xml等轻量级格式, 轻巧简约, 如同名片.

    交互 以易于人接受和理解的形式, 比如文本, 图形, 音视频等.

    我想, 这也就是Roy Fielding 博士所强调的, restful思想代表"表述性状态转移", 而不只是去掉网址中的问号而已.

    现在的软件开发的一个很大的问题是, 很多时候都是在不重要的事情上花费了太多时间, 处理各种编程语言, 各种格式转换和通信的实现. 其实这些工作应该尽可能规范化和自动化, 让数据透明和简单的反映在界面上, 自动实现所有的通信, 转换和绑定.

    比如metetor这个js框架就是以这样的思路, 让界面和远程数据绑定, 中间所有传输和转换的细节不用关心, 只要简单的声明就可以. 所以可以极大的提高开发效率, 让程序员可以把更多的精力放在业务上.

    而数据框架spark实现的则是存储跨越网络的透明化. 无需关心数据存放在什么地方, 只要指出你要哪些数据就可以了. 这也是云存储的理想.

    而google的Kubernetes(简写为k8s)实现了运算和控制跨越网络的透明化. 不用管软件运行在什么地方, 运行到什么状态, 框架会自动帮你管理.  这是云操作系统的理想.

    但是这些技术都还只是初级阶段, 需要更多发展和整合. 所以今天我们还是要手工处理很多技术细节, 才能让业务流程正常运行起来, 这也是软件行业成本高, 效率低的症结所在.

    但是我们可以相信, 未来一定是朝这个方向发展. 未来程序员只关心两点, 首先是数据, 然后是让用户方便的查看和操作数据. 其余的技术细节都是由更底层的框架和技术自动提供支持的.

    我们可以举个例子, 比如自行车

    有脚蹬和刹车, 作为控制器,

    有链条, 作为传输系统,

    有车把作为交互设备,

    但是好像缺了存储, 所以人自己直接充当了存储系统, 按照固定的程序去蹬车, 让车跑起来.

    这就好像早期的计算机没有持久化存储, 每次运行都是人工连接各种电线开关, 然后才能开始运算.

    所以冯诺依曼提出了存储程序的思想, 把人脑中存储并自己执行实现的初始化程序, 通过编码, 存储在计算机的持久化存储器中, 人只需要按下开机按钮, 计算机就能自动启动和执行运算.

    我们可以看到, 最根本的控制器还是人, 但是随着软件越来越智能, 机器的控制能力越来越高, 人的工作就会越来越简化.

    所谓的人工智能, 其实就是人编写了更多的软件, 存储在计算机里, 然后计算机就可以自动作更多的事了.

    还是放一下电脑各部件的图片吧, 让大家有个直观印象.

    cpu 核心处理部件, 干活快, 发热多, 一定要注意散热

    内存, 存取速度快, 但是断电后信息消失, 开机运行主要是使用内存, 所以编辑文件一定要注意保存

    硬盘, 速度稍慢, 断电后信息不消失, 所以称为持久化存储(小的是SSD)

    主板 各种线路, 插槽, 接口

    显示器 就是屏幕, 我们获得的多数信息都是从他那看来的

    键盘鼠标 很标准稳定的设备, 几十年来几乎没什么变化

    机箱电源(下面那个方孔里) 提供结构和能源支撑, 无名英雄

    笔记本电脑与此大部分都类似, 大家可以自行搜索.

    相关文章

      网友评论

      本文标题:疾风式全栈教程(1)-计算机结构介绍

      本文链接:https://www.haomeiwen.com/subject/gmpxrftx.html