大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: 认识计算机 修改讲义

计算机就像一把机关枪

给之前我们学习过的计算机硬件归一个类:

  • 输入(Input)/输出(Output):鼠标/键盘,屏幕
  • 运算:CPU/GPU
  • 存储:内存/外存(硬盘/U盘)/显存
这就构成了经典的冯·诺依曼体系结构(被几乎现代所有的计算机普遍使用),如下图所示:

整个计算机以CPU为核心。

程序的执行过程实际上是CPU不断地从存储器中读取内容(指令和数据)并予以执行的过程。CPU就像:

不停的工作。


图灵机

冯·洛伊曼结构计算机其实是图灵机的实现。

图灵机是对带有可执行程序的可工作计算机的一种抽象的描述:是图灵在一篇有关“可计算性”论文的附录中假想出来的,主要是想证明:

凡是人类可计算的,也可由机器自动计算

这在当时,是石破天惊的,人民普遍认为:计算(至少是复杂的计算)只能是由“人脑”的“智慧”来实现的。

延伸开来:既然计算可以由机器自动实现,那智慧呢?所以后来图灵又天才性的提出“人工智能(AI)”,并因此而被成为:人工智能之父。(更多见:人工智能 / 逸闻史话)

图灵机的贡献:

可以用一种非常简单的、机械的机器(算法)完成非常复杂的功能。

PS记住这个“简单”(Keep It Stupid Simple),我们在后面二进制、代码书写要求中也会反复提及。


理解了冯·洛伊曼体系结构,就能理解:


加一块内存条

比如说你电脑/公司的服务器性能不行了,程序员过来看了下,建议很可能就是:加一块内存条吧!

为什么加快内存条就能解决性能问题?CPU呢,磁盘呢?

演示:任务管理器,比如CPU消耗很高,加内存条能降低CPU消耗么?

注意:冯·诺依曼结构图中的存储器特指内存

  • CPU只能调用内存数据,能调用外存中数据;
  • 外存中的数据要被CPU使用,必须先经过内存。

复习(作业):内/外存的区别,或:为什么需要两种存储?

  • 内存:速度快(电子光速+随机访问),但是贵,不能长期保存(断电丢失)
  • 外存:速度慢(机械不用说/固态硬盘SSD目前也一样),但是便宜,能够长期保存

所以内存越大,能够存储的数据越多。一次性的把更多的数据加载到内存,就可以减少把数据从外存读到内存的时间。

就类似于一批货物:一次性拉过来 vs 多次运过来。


性能优化

程序员:

  • 合格:实现功能
  • 优秀:性能、安全和可维护性三者之间实现完美平衡


性能瓶颈:I/O

计算机各个组件互相配合,作为一个整体运行。当各个组件运行速度不一致的时候,就会出现一个组件闲置(idle),等待另外一个组件的情形,拖累性能。

所以要提高性能,最重要的是:找到瓶颈,补足短板。(系统性能优化方法论之一)

木桶原理

目前来说,硬件的运行速度,从高到低依次是:CPU > 内存 > 外存 > 网络……

系统的瓶颈常常在于I/O。

工程师(利用现有技术手段:体会/强调)们怎么办?


缓存和缓冲

两者有时候会被混用,但严格来说:

缓存(Cache):,通常用于“读”。又被翻译为“快取”(台湾)个人认为,更符合它的特点:一种快速获取数据的技术。比如:PPT动画演示

  1. (原始)数据本来存放在磁盘中
  2. CPU将以上数据从磁盘中读取内存中,开始使用
  3. 但是,CPU使用完成这些数据之后会将其抛弃:内存的容量是有限的,所以内存中(暂时不用)的数据默认会该被释放
  4. 而是将数据保留在内存中,我们称其为(缓存)数据
  5. 下一次CPU再要取以上数据时,就不再从磁盘中取原始数据,而是直接从内存中取缓存数据

缓存技术简单粗暴(如果有一把枪指着我的头,要我在5分钟内解决项目的性能问题,我立马就会开始缓存……),本质上是“空间换时间”。现在被大量使用:

  • 复习:CPU上都有ROM缓存
  • 后面会讲:
    • 浏览器/数据库都自带缓存
    • Web服务器上,大量缓存:16G/32G/64G,甚至集群……(复习:内存是唯一价格波动的电子产品)

@想一想@:缓存技术有哪些问题?

  • 容量/热启动
  • 过期数据

缓冲(Buffer):通常用于“写”。比如,当需要将内存中的数据写入磁盘,有一点写一点,有一点写一点,磁盘扛不住;不如把数据先存在一个“缓冲区”中,然后一次性的写入磁盘。

@想一想@:缓冲本质上是降速,为什么要这样呢?

  • CPU将数据扔进缓冲区中就不管了,可以继续干其他事
  • 大块的数据写入可以避免“磁盘碎片”:“零星的”数据“散乱的”存放在磁盘上


软/硬件分离

按冯·诺依曼结构制造出来计算机,另一个重大特点是:CPU的工作内容由存储器中的“内容”(指令和数据)决定。

即:计算机只是按输入内容忠实的执行——木有灵魂,^_^

从而:

  • 实现了/硬件的分离,产生了新的智力成果:程序/软件;新的岗位:程序员/软件工程师……
  • 诞生了通用计算机。之前也有计算机,但计算机具体能干啥,是由硬件本身决定的


名词解释

软件/程序/应用/APP……:都是对计算机的指令集合。


单位
对应的人/职位
code(代码)

coder(码农/码畜:仅用于自黑)
program(程序)
个    
programer(程序员)
software(软件)
个/套
software engineer(软件工程师)
develope(开发)

developer(开发人员,通常对应UI、测试、产品经理……)

演示:代码长啥样:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello! 源栈欢迎您");
        }
    }

学习笔记
源栈学历
今天学习不努力,明天努力找工作

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 认识计算机 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码