问题问的大错特错。什么叫感觉一台计算机能花几分钟运行几行代码,看这一句,我猜题主是一个计算机专业的新生,编写代码的时候产生了这种疑问。但是如果你耐心继续学习,等到大二大三把一些专业课上完的话,就不会问出这种低级问题了。 编译和运行不一样 很多初学者分不清编译和运行,认为只要点击了IDE上的运行按钮,程序就开始运行了,其实这是错误的。就拿C语言为例,点击Clion或者visualstudio或者其他IDE上面的运行按钮之后,IDE会首先保存代码文件,然后开始编译,生成后缀名为。o的中间文件,然后根据头文件再把生成的和系统库链接在一起,最后才能生成可执行文件。 编译这个过程是一项非常复杂的工作,具体有多复杂,等到题主学了编译原理这门课就明白了。根据编程语言的设计不同,编译的时间也有长短之分,但是一般情况下都远远远远长于程序运行的时间。一旦编译完毕,就按照专业课上程序的复杂程度,基本上都是瞬间就可以运行完毕的。不信的话,可以在不修改代码的情况下在此点一下运行按钮,这时候就可以发现代码是瞬间运行完毕的。 现代处理器的运行速度是非常非常快的 我从小就对计算机非常感兴趣,每次学校发的计算机课本我都是第一时间看完,然后反反复复的来回看。没办法,谁叫当时家里没钱买电脑呢。所以计算机课本里面的一些内容,我至今仍然都记得。世界上第一台计算机叫做埃尼阿克,运行速度是每秒5000次加法。这个速度现在虽然看起来非常垃圾,但是还是远超手工计算的。那么现在处理器的运行速度是多少呢?我查了一下维基,2017年出厂的AMD锐龙1800x,每秒钟可以运行三千亿次指令。这还不是现在最新最强处理器,如果是现在新的处理器,速度只会更快。 之所以我们感觉程序运行慢,一般情况下都是因为出现了瓶颈拖累了处理器。例如下面的代码,将1000个数字打印到终端上。因为涉及了IO,所以会给人速度慢的错觉。要知道向终端输出是一件非常慢的事情。但是如果你通过重定向将输出转移到文件里的话,可以发现程序仍然是瞬间运行完毕。我曾经尝试过输出几百万的数据,导出到文件中也就是几兆的事情而已,也是瞬间完成的。 最后回到问题,首先程序运行速度和代码行数没有任何关系。如果是一个死循环,那么就算他很简单,也是永远也运行不完的。就算只调用了一个函数,可能这个函数背后有很大一坨逻辑,因而运行速度会受到影响。 然后是那些编程题,其实都属于小儿科的水平,纯运行的话,基本上都是瞬间就可以运行完成。之所以感觉到慢,要么是你把编译时间当成了运行时间,要么就是涉及到了IO等浪费时间的操作,不要因为有东西拖后腿就怀疑现在处理器的能力。 最后就是游戏了。游戏作为一个高度工业化的产品,做出来就是为了让玩家玩的爽,做出来就是为了赚钱的。那么游戏自然是一个经过高度优化的计算机程序,理所当然的可以发挥出处理器本身的水平。一般人玩游戏也就是读图的时候卡一下,加载完毕之后,可以顺顺当当的流畅游玩。这才是处理器本来就有的性能。 首先,这个需要看代码的底层处理量,代码岗书并不能代表他做的事情数量,例如你用了这个循环每次打印数字加一,并输出出来,循环上限1000万次。代码估计不超过5号,但计算机打印完,至少几分钟了,原因是打印过程很慢,涉及到io。又或者你的代码基本在底层执行,你只是写了2行代码,但时间这两行代码需要做大量的计算才能完成,类似于Python,其很多库对大量操作进行了封装,让使用者方便使用,但内部操作复杂。 而游戏运行是以帧来计算的,每一帧的处理量并不大,首先显卡专门负责图形渲染,cpu主要负责实时计算,每帧的计算量都在内存中运算,且计算量并没有太大,主要是显卡渲染的计算量大。 其次看使用的算法,好的算法可以大幅度降低运算时间,算法的好坏也是主要原因之一。 最后看使用的开发语言,越是高级的语言,运行速度越慢。 打个比方: 1。平面内三角形的内角和等于180度 2。任一大于2的整数都可写成三个质数之和 同样是一句话,前一句只要初中毕业,最多五分钟就能证明出来,后一句,从1742年至今也没人完全想明白。 您好很高兴回答您的问题。 您提出这样的问题,显然对计算机运算是不了解的,那么就让我一本正经的来解释一下,举个例子: 体育老师布置了一个任务,让小王和小张分别按不同策略跑一千米,小张和小王理论跑步的速度是一样的,但为什么小张要比小王先跑完? 小张的策略是,不停歇,以最高速度跑完。 小张的策略是,每跑两步休息一秒钟,每跑一百米喝一口水。 计算机执行任务速度与CPU频率、核心数量、内存、磁盘等诸多因素相关,但对于不同任务的执行时间,同一台计算机上主要取决于任务的差异性。在代码上来说,代码行数多少,并不能说明任务的复杂度,也不能单纯的将代码少的任务直接与执行时间挂钩。如一行sleep的代码就可以让这个任务休眠一万年。 以上,感谢您的阅读,我是源代码科技 首先介绍一下编程语言开发出来的程序是如何执行的。以java为例,java语言写出来的程序文件是xxx。java,这是无法直接被计算机执行的,需要经过编译器转换为成为字节码后,也就是xxx。class文件,才能被java虚拟机jvm读懂。但光有字节码还不够,计算机只能够读懂二进制命令,除了1和0之外,谁都不认识。因此还需要通过jvm的解释器将字节码翻译为机器可以执行的二进制文件,这样程序才能被计算机运行。 对新开发程序来说,需要被编译解释后才能执行,所以刚刚写出的代码,第一次运行的速度是很慢的。待运行过一次后,机器内存里便有了程序的二进制文件缓存,因此随后的运行就十分流畅了,无需在等待编译解释便可执行。 作为大型游戏来说,启动游戏之前也有一个较长的等待期,这时游戏界面上通常会出现一根进度条,这是游戏在进行预热。比如我们玩热门单机游戏《巫师3》时,打开后游戏有一段加载期,在这段时间内,游戏主程序在后台正忙碌的加载游戏引擎,构建人物、场景模型,加载缓存数据,当一切准备完毕以后,游戏主界面才会呈现在我们面前。当然如果计算机性能好,内存大的话,游戏资源可以获得足够的缓存空间,玩的过程就比较顺畅。如果内存不足的话,游戏资源没有足够的缓存,不得不退而求其次,在硬盘中加载数据,从硬盘读取数据可比内存慢的多,因而会造成游戏卡顿。 所以不能说运行代码要几分钟,而玩游戏却比较顺畅。游戏的主体部分也是由代码组成的,游戏启动时,与代码第一次运行一样,经历了加载预热,待准备完所有的资源后,才会出现游戏界面,我们才能尽情的畅玩其中。 那看你的代码运行啥了呗,写个死循环也不过两三行代码。 那不看看运行的是什么代码,我写个死循环一年都跑不完,写个sleep也能拖好久,如果写个00,跑到电脑蓝屏都跑不完 一行代码有可能只会让cpu跑一条指令,比如i;也有可能让cpu跑无数条指令,比如:while(1); 这行代码就能让cpu一直跑到它断电为止!