为什么感觉一台计算机能花几分钟运行几行代码,却能如此快速地运行复杂的东西,比如游戏?
问题问的大错特错。
什么叫“感觉一台计算机能花几分钟运行几行代码”,看这一句,我猜题主是一个计算机专业的新生,编写代码的时候产生了这种疑问。
但是如果你耐心继续学习,等到大二大三把一些专业课上完的话,就不会问出这种低级问题了。
编译和运行不一样很多初学者分不清编译和运行,认为只要点击了IDE上的运行按钮,程序就开始运行了,其实这是错误的。
就拿C语言为例,点击Clion或者visual studio或者其他IDE上面的运行按钮之后,IDE会首先保存代码文件,然后开始编译,生成后缀名为.o的中间文件,然后根据头文件再把生成的和系统库链接在一起,最后才能生成可执行文件。
编译这个过程是一项非常复杂的工作,具体有多复杂,等到题主学了编译原理这门课就明白了。
根据编程语言的设计不同,编译的时间也有长短之分,但是一般情况下都远远远远长于程序运行的时间。
一旦编译完毕,就按照专业课上程序的复杂程度,基本上都是瞬间就可以运行完毕的。
不信的话,可以在不修改代码的情况下在此点一下运行按钮,这时候就可以发现代码是瞬间运行完毕的。
现代处理器的运行速度是非常非常快的我从小就对计算机非常感兴趣,每次学校发的计算机课本我都是第一时间看完,然后反反复复的来回看。
没办法,谁叫当时家里没钱买电脑呢。
所以计算机课本里面的一些内容,我至今仍然都记得。
世界上第一台计算机叫做埃尼阿克,运行速度是每秒5000次加法。
这个速度现在虽然看起来非常垃圾,但是还是远超手工计算的。
那么现在处理器的运行速度是多少呢?
我查了一下维基,2017年出厂的AMD 锐龙1800x,每秒钟可以运行三千亿次指令。
这还不是现在最新最强处理器,如果是现在新的处理器,速度只会更快。
之所以我们感觉程序运行慢,一般情况下都是因为出现了瓶颈拖累了处理器。
例如下面的代码,将1000个数字打印到终端上。
因为涉及了IO,所以会给人速度慢的错觉。
要知道向终端输出是一件非常慢的事情。
但是如果你通过重定向将输出转移到文件里的话,可以发现程序仍然是瞬间运行完毕。
我曾经尝试过输出几百万的数据,导出到文件中也就是几兆的事情而已,也是瞬间完成的。
最后回到问题,首先程序运行速度和代码行数没有任何关系。
如果是一个死循环,那么就算他很简单,也是永远也运行不完的。
就算只调用了一个函数,可能这个函数背后有很大一坨逻辑,因而运行速度会受到影响。
然后是那些编程题,其实都属于小儿科的水平,纯运行的话,基本上都是瞬间就可以运行完成。
之所以感觉到慢,要么是你把编译时间当成了运行时间,要么就是涉及到了IO等浪费时间的操作,不要因为有东西拖后腿就怀疑现在处理器的能力。
最后就是游戏了。
游戏作为一个高度工业化的产品,做出来就是为了让玩家玩的爽,做出来就是为了赚钱的。
那么游戏自然是一个经过高度优化的计算机程序,理所当然的可以发挥出处理器本身的水平。
一般人玩游戏也就是读图的时候卡一下,加载完毕之后,可以顺顺当当的流畅游玩。
这才是处理器本来就有的性能。