百科问答小站 logo
百科问答小站 font logo



CPU 的工作原理是什么? 第1页

  

user avatar   mac-82-59 网友的相关建议: 
      

想了解CPU的工作原理莫过于从头开始用最基础的元素打造一个简单CPU。

接下来我会从最简单的晶体管开始一步步讲解CPU是如何构造出来的,明白了这个过程理解 CPU 的工作原理不在话下,在此之后我会从最基础的二进制机器指令一步步讲解高级语言的基本原理,通读本文后你将彻底明白CPU与高级语言的工作原理。

以下内容出自我的两篇文章《你管这破玩意叫CPU?》《你管这破玩意叫编程语言?》。

每次回家开灯时你有没有想过,用你按的简单开关实际上能打造出复杂的 CPU 来,只不过需要的数量会比较多,也就几十亿个吧。

伟大的发明

过去200年人类最重要的发明是什么?蒸汽机?电灯?火箭?这些可能都不是,最重要的也许是这个小东西:

这个小东西就叫晶体管,你可能会问,晶体管有什么用呢?

实际上晶体管的功能简单到不能再简单,给一端通上电,那么电流可以从另外两端通过,否则不能通过,其本质就是一个开关。

就是这个小东西的发明让三个人获得了诺贝尔物理学奖,可见其举足轻重的地位。无论程序员编写的程序多么复杂,软件承载的功能最终都是通过这个小东西简单的开闭完成的,除了神奇二字,我想不出其它词来。

AND、OR、NOT

现在有了晶体管,也就是开关,在此基础之上就可以搭积木了,你随手搭建出来这样三种组合:

  • 两个开关只有同时打开电流才会通过,灯才会亮
  • 两个开关中只要有一个打开电流就能通过,灯就会亮
  • 当开关关闭时电流通过灯会亮,打开开关灯反而电流不能通过灯会灭

天赋异禀的你搭建的上述组合分别就是:与门,AND Gate、或门,OR gate、非门,NOT gate,用符号表示就是这样:

道生一、一生二、二生三、三生万物

最神奇的是,你随手搭建的三种电路竟然有一种很amazing的特性,那就是:任何一个逻辑函数最终都可以通过AND、OR以及NOT表达出来,这就是所谓的逻辑完备性,就是这么神奇。

也就是说给定足够的AND、OR以及NOT门,就可以实现任何一个逻辑函数,除此之外我们不需要任何其它类型的逻辑门电路,这时我们认为{AND、OR、NOT}就是逻辑完备的。

这一结论的得出吹响了计算机革命的号角,这个结论告诉我们计算机最终可以通过简单的{AND、OR、NOT}门构造出来,就好比基因。

老子有云:道生一、一生二、二生三、三生万物,实乃异曲同工之妙。虽然,我们可以用AND、OR、NOT来实现所有的逻辑运算,但我们真的需要把所有的逻辑运算都用AND、OR、NOT门实现出来吗?显然不是,而且这也不太可行。

计算能力是怎么来的

现在能生成万物的基础元素与或非门出现了,接下来我们着手设计CPU 最重要的能力:计算,以加法为例。由于CPU只认知 0 和 1,也就是二进制,那么二进制的加法有哪些组合呢:

  • 0 + 0,结果为0,进位为0
  • 0 + 1,结果为1,进位为0
  • 1 + 0,结果为1,进位为0
  • 1 + 1,结果为0,进位为1,二进制嘛!

注意进位一列,只有当两路输入的值都是 1 时,进位才是 1 ,看一下你设计的三种组合电路,这就是与门啊,有没有!再看下结果一列,当两路输入的值不同时结果为1,输入结果相同时结果为0,这就是异或啊,有没有!

我们说过与或非门是逻辑完备可以生万物,异或逻辑当然不在话下,用一个与门和一个异或门就可以实现二进制加法:

上述电路就是一个简单的加法器,就问你神奇不神奇,加法可以用与或非门实现,其它的也一样能实现,逻辑完备嘛。

除了加法,我们也可以根据需要将不同的算数运算设计出来,负责计算的电路有一个统称,这就是所谓的arithmetic/logic unit,ALU,CPU 中专门负责运算的模块,本质上和上面的简单电路没什么区别,就是更加复杂而已。

现在,通过与或非门的组合我们获得了计算能力,计算能力就是这么来的。但,只有计算能力是不够的,电路需要能记得住信息。

神奇的记忆能力

到目前为止,你设计的组合电路比如加法器天生是没有办法存储信息的,它们只是简单的根据输入得出输出,但输入输出总的有个地方能够保存起来,这就是需要电路能保存信息。

电路怎么能保存信息呢?你不知道该怎么设计,这个问题解决不了你寝食难安,吃饭时在思考、走路时在思考,蹲坑时在思考,直到有一天你在梦中遇一位英国物理学家,他给了你这样一个简单但极其神奇的电路:

这是两个NAND门的组合,不要紧张,NAND也是有你设计的与或非门组合而成的,所谓NAND门就是与非门,先与然后取非,比如给定输入1和0,那么与运算后为0,非运算后为1,这就是与非门,这些不重要。

比较独特的是该电路的组合方式,一个NAND门的输出是两一个NAND门的输入,该电路的组合方式会自带一种很有趣的特性,只要给S和R段输入1,那么这个电路只会有两种状态:

  • 要么a端为1,此时B=0、A=1、b=0;
  • 要么a端为0,此时B=1、A=0、b=1;

不会再有其他可能了,我们把a端的值作为电路的输出

此后,你把S端置为0的话(R保持为1),那么电路的输出也就是a端永远为1,这时就可以说我们把1存到电路中了;而如果你把R段置为0的话(S保持为1),那么此时电路的输出也就是a端永远为0,此时我们可以说把0存到电路中了。

就问你神奇不神奇,电路竟然具备存储信息的能力了。现在为保存信息你需要同时设置S端和R端,但你的输入是有一个(存储一个bit位嘛),为此你对电路进行了简单的改造:

这样,当D为0时,整个电路保存的就是0,否则就是1。

寄存器与内存的诞生

现在你的电路能存储一个比特位了,想存储多个比特位还不简单,复制粘贴就可以了:

我们管这个组合电路就叫寄存器,你没有看错,我们常说的寄存器就是这个东西。

你不满足,还要继续搭建更加复杂的电路以存储更多信息,同时提供寻址功能,就这样内存也诞生了。

寄存器及内存都离不开上一节那个简单电路,只要通电,这个电路中就保存信息,但是断电后很显然保存的信息就丢掉了,现在你应该明白为什么内存在断电后就不能保存数据了吧

硬件还是软件?

现在我们的电路可以计算数据、也可以存储信息,但现在还有一个问题,那就是尽管我们可以用AND、OR、NOT表达出所有的逻辑函数,但我们真的有必要把所有的逻辑运算都用与或非门实现出来吗?这显然是不现实的。

这就好比厨师,你没有听说只专做一道菜的厨师然后酒店要把各个菜系厨师雇全才能做出一桌菜来吧!

中国菜系博大精深,千差万别,但制作每道菜品的方式大同小异,其中包括刀工、颠勺技术等,这些是基本功,制作每道菜品都要经过这些步骤,变化的也无非就是食材、火候、调料等,这些放到菜谱中即可,这样给厨师一个菜谱他就能制作出任意的菜来,在这里厨师就好比硬件,菜谱就好比软件。

同样的道理,我们没有必要为所有的计算逻辑实现出对应的硬件,硬件只需要提供最基本的功能,最终所有的计算逻辑都通过这些最基本的功能用软件表达出来就好,这就是所谓的软件一词的来源,硬件不可变,但软件可变不变的是硬件但提供不同的软件就能让硬件实现全新的功能无比天才的思想,人类真的是太聪明了。

同样一台计算机硬件,安装上word你就能编辑文档,安装上微信你就能在公号中读到码农的荒岛求生、安装上游戏你就能玩王者农药,硬件还是那套硬件,提供不同的软件就是实现不同的功能,每次打开电脑使用各种App时没有在内心高呼一声牛逼你都对不起计算机这么伟大的发明创造,这就是为什么计算机被称为通用计算设备的原因,这一思想是计算机科学祖师爷图灵提出的。

说到牛逼的通用设备,在这样也推荐一份牛逼的算法刷题资料,除了本文讲到的底层技术,,想进BAT、TMD、快手这样的一线大厂算法绝不可忽视,认认真真过上一遍这份资料,这些大厂算法面试一关大部分题目都不在话下

扯远了,接下来我们看下硬件是怎么提供所谓的基本功能的。

硬件的基本功

让我们来思考一个问题,CPU怎么能知道自己要去对两个数进行加法计算,以及哪两个数进行加法计算呢?

很显然,你得告诉CPU,该怎么告诉呢?还记得上一节中给厨师的菜谱吗?没错,CPU也需要一张菜谱告诉自己该接下来该干啥,在这里菜谱就是机器指令,指令通过我们上述实现的组合电路来执行。

接下来我们面临另一个问题,那就是这样的指令应该会很多吧,废话,还是以加法指令为例,你可以让CPU计算1+1,也可以计算1+2等等,实际上单单加法指令就可以有无数种组合,显然CPU不可能去实现所有的指令。

实际上CPU只需要提供加法操作,你提供操作数就可以了,CPU 说:“我可以打人”,你告诉CPU该打谁、CPU 说:“我可以唱歌”,你告诉CPU唱什么,CPU 说我可以做饭,你告诉CPU该做什么饭,CPU 说:“我可以炒股”,你告诉CPU快滚一边去吧韭菜。因此我们可以看到CPU只提供机制或者说功能(打人、唱歌、炒菜,加法、减法、跳转),我们提供策略(打谁、歌名、菜名,操作数,跳转地址)。

CPU 表达机制就通过指令集来实现的。

指令集

指令集告诉我们 CPU 可以执行什么指令,每种指令需要提供什么样的操作数。不同类型的CPU会有不同的指令集。指令集中的指令其实都非常简单,画风大体上是这样的:

  • 从内存中读一个数,地址是abc
  • 对两个数加和
  • 检查一个数是不是大于6
  • 把这数存储到内存,地址是abc
  • 等等

看上去很像碎碎念有没有,这就是机器指令,我们用高级语言编写的程序,比如对一个数组进行排序,最终都会等价转换为上面的碎碎念指令,然后 CPU 一条一条的去执行,很神奇有没有。接下来我们看一条可能的机器指令:

这条指令占据16比特,其中前四个比特告诉CPU这是加法指令,这意味着该CPU的指令集中可以包含2^4也就是16个机器指令,这四个比特位告诉CPU该做什么,剩下的bit告诉CPU该怎么做,也就是把寄存器R6和寄存器R2中的值相加然后写到寄存器R6中。

可以看到,机器指令是非常繁琐的,现代程序员都使用高级语言来编写程序,关于高级程序语言以及机器指令的话题请参见《你管这破玩意叫编程语言?》。

指挥家:让我们演奏一曲

现在我们的电路有了计算功能、存储功能,还可以通过指令告诉该电路执行什么操作,还有一个问题没有解决。

我们的电路有很多部分,用来计算的、用来存储的,以最简单的加法为例,假设我们要计算1+1,这两个数分别来自寄存器R1 和 R2,要知道寄存器中可以保存任意值,我们怎么能确保加法器开始工作时R1和R2中在这一时刻保存的都是1而不是其它数

即,我们靠什么来协调或者说靠什么来同步电路各个部分让它们协同工作呢?就像一场成功的交响乐演离不开指挥家一样,我们的计算组合电路也需要这样一个指挥家。

负责指挥角色的就是时钟信号。

时钟信号就像指挥家手里拿的指挥棒,指挥棒挥动一下整个乐队会整齐划一的有个相应动作,同样的,时钟信号每一次电压改变,整个电路中的各个寄存器(也就是整个电路的状态)会更新一下,这样我们就能确保整个电路协同工作不会这里提到的问题。

现在你应该知道CPU的主频是什么意思了吧,主频是说一秒钟指挥棒挥动了多少次,显然主频越高CPU在一秒内完成的操作也就越多。

大功告成

现在我们有了可以完成各种计算的ALU、可以存储信息的寄存器以及控制它们协同工作的时钟信号,这些统称 Central Processing Unit,简称就是 CPU

接下来我们看一下CPU 与高级语言。

创世纪:聪明的笨蛋

CPU 相当原始,就像单细胞生物一样,只能把数据从一个地方搬到另一个地方、简单的加一下,没有任何高难度动作,这些操作虽然看上去很简单很笨,但 CPU 有一个无与伦比的优势,那就是一个字:快,这是人类比不了了的,CPU 出现后人类开始拥有第二个大脑。就是这样原始的一个物种开始支配起另一个叫做程序员的物种。

干活的是大爷

一般来说两个不同的物种要想交流,比如人和鸟,就会有两种方式:要不就是鸟说人话,让人听懂;要不就是人说鸟语,让鸟听懂;就看谁厉害了。最开始 CPU 胜出,程序员开始说鸟语并认真感受 CPU 的支配地位,好让 CPU 大爷可以工作,感受一下最开始的程序员是怎么说鸟语的:

程序员按照 CPU 的旨意直接用0和1编写指令,你没有看错,这破玩意就是代码了,就是这么原生态,然后放到打孔纸带上输入给CPU,CPU 开始工作,这时的程序可真的是看得见摸得着,就是有点浪费纸。

这时程序员必须站在 CPU 的角度来写代码,画风是这样的:

       1101101010011010 1001001100101001 1100100011011110 1011101101010010     

乍一看你知道这是什么意思吗?你不知道,心想:“这是什么破玩意?”,但 CPU 知道,心想“这就简直就是世界上最美的语言”。

天降大任

终于有一天程序员受够了说鸟语,好歹也是灵长类,叽叽喳喳说鸟语太没面子,你被委以重任:让程序员说人话。你没有苦其心志劳其筋骨,而是仔细研究了一下 CPU,发现 CPU 执行的指令集来来回回就那么几个指令,比如加法指令、跳转指令等等,因此你把机器指令和对应的具体操作做了一个简单的映射,把机器指令映射到人类能看懂的单词,这样上面的01串就变成了:

       sub $8, %rsp  mov $.LC0, %edi  call puts  mov $0, %eax     

这样,程序员不必生硬的记住1011.....,而是记住人类可以认识的ADD SUB MUL DIV等这样的单词即可。

汇编语言就这样诞生了,编程语言中首次出现了人类可以认识的东西

这时程序员终于不用再“叽叽喳喳。。”,而是升级为“阿巴阿巴。。”,虽然人类认知“阿巴阿巴”这几个字,但这和人类的语言在形式上差别还是有点大。

细节 VS 抽象

尽管汇编语言已经有人类可以认识的单词,但汇编语言和机器语言一样都属于低级语言。所谓低级语言是说你需要关心所有细节。关心什么细节呢?我们说过,CPU 是非常原始的东西,只知道把数据从一个地方搬到另一个地方,简单的操作一下再从一个地方搬到另一地方。因此,如果你想用低级语言来编程的话,你需要使用多个“把数据从一个地方搬到另一个地方,简单的操作一下再从一个地方搬到另一地方”这样的简单指令来实现诸如排序这样复杂的问题。有的同学可能对此感触不深,这就好比,本来你想表达“去给我端杯水过来”:

如果你用汇编这种低级语言就得这样实现:

我想你已经 Get 到了。


弥补差异

CPU 实在太简单了,简单到不能了理解任何稍微抽象一点诸如“给我端杯水”这样的东西,但人类天生习惯抽象化的表达,人类和机器的差距有办法来弥补吗?换句话说就是有没有一种办法可以自动把人类抽象的表达转为 CPU 可以理解的具体实现,这显然可以极大增强程序员的生产力,现在,这个问题需要你来解决。

套路,都是套路

思来想去你都不知道该怎么把人类的抽象自动转为 CPU 能理解的具体实现,就在要放弃的时候你又看了一眼 CPU 可以理解的一堆细节:

电光火石之间灵光乍现,你发现了满满的套路,或者说模式。大部分情况下 CPU 执行的指令平铺直叙的,就像这样:

这些都是告诉 CPU 完成某个特定动作,你给这些平铺直叙的指令起了个名字,姑且就叫陈述句吧,statement。

除此之外,你还发现了这样的套路,那就是需要根据某种特定状态决定走哪段指令,这个套路在人看来就是“如果。。。就。。。否则。。就。。。”:

       if ***      blablabla  else ***     blablabla     

在某些情况下还需要不断重复一些指令,这个套路看起来就是原地打转:

       while ***      blablabla     

最后就是这里有很多看起来差不多的指令,就像这里:

这些指令是重复的,只是个别细节有所差异,把这些差异提取出来,剩下的指令打包到一起,用一个代号来指定这些指令就好了,这要有个名字,就叫函数吧:

       func abc:     blablabla     

现在你发现了所有套路:

       // 条件转移  if ***         blablabla    else ***       blablabla // 循环   while ***       blablabla // 函数  func abc:       blablabla     

这些相比汇编语言已经有了质的飞跃,因为这已经和人类的语言非常接近了。接下来你发现自己面临两个问题:

  1. 这里的blablabla该是什么呢?
  2. 该怎样把上面的人类可以认识的字符串转换为 CPU 可以认识的机器指令


盗梦空间

你想起来了,上文说过大部分代码都是平铺直叙的陈述句,statement,这里的blablabla 仅仅就是一堆陈述句吗?显然不是,blablabla 可以是陈述句,当然也可以是条件转移if else,也可以是循环while,也可以是调用函数,这样才合理。虽然这样合理,很快你就发现了另一个严重的问题:blabalbla中可以包含 if else 等语句,而if else等语句中又可以包含blablabla,blablabla中反过来又双可能会包含if else等语句,if else等语句又双叒有可能会包含blablabla,blablabla又双叒叕可能会包含if else等语句。。。

就像盗梦空间一样,一层梦中还有一层梦,梦中之梦,梦中之梦中之梦。。。一层嵌套一层,子子孙孙无穷匮也。。。

此时你已经明显感觉脑细胞不够用了,这也太复杂了吧,绝望开始吞噬你,上帝以及老天爷啊,谁来救救我!

此时你的高中老师过来拍了拍你的肩膀,递给了你一本高中数学课本,你恼羞成怒,给我这破玩意干什么,我现在想的问题这么高深,岂是一本破高中数学能解决的了的,抓过来一把扔在了地上。此时一阵妖风吹过,教材停留在了这样一页,上面有这样一个数列表达:

       f(x) = f(x-1) + f(x-2)     

这个递归公式在表达什么呢?f(x)的值依赖f(x-1),f(x-1)的值又依赖f(x-2),f(x-2)的值又依赖。。。

一层嵌套一层,梦中之梦,if中嵌套 statement,statement 又可以嵌套if。。。

等一下,这不就是递归嘛,上面看似无穷无尽的嵌套也可以用递归表达啊!你的数学老师仰天大笑,too young too simple,留下羞愧的你佛手而去,看似高科技的东西竟然用高中数学就解决了,一时震惊的目瞪狗带不知所措无地自容。有了递归这个概念加持,聪明的智商又开始占领高地了。

递归:代码的本质

不就是嵌套嘛,一层套一层嘛,递归天生就是来表达这玩意的 (提示:这里的表达并不完备,真实的编程语言不会这么简单,这里仅仅用作示例):

       if : if bool statement else statements  for: while bool statements  statement: if | for | statement     

上面一层嵌套一层的盗梦空间原来可以这么简洁的几句表达出来啊,你给这几句表达起了高端的名字,语法数学,就是可以让一切都变得这么优雅。世界上所有的代码,不管有多么复杂最终都可以归结到语法上,原因也很简单,所有的代码都是按照语法的形式写出来的嘛。至此,你发明了真正的人类可以认识的编程语言。之前提到的第一个问题解决了,但仅仅有语言还是不够的。

让计算机理解递归

现在还差一个问题,怎样才能把这语言最终转化为 CPU 可以认识的机器指令呢?人类可以按照语法写出代码,这些代码其实就是一串字符,怎么让计算机也能认识用递归语法表达的一串字符呢?这是一项事关人类命运的事情,你不禁感到责任重大,但这最后一步又看似困难重重,你不禁仰天长叹,计算机可太难了。此时你的初中老师过来拍了拍你的肩膀,递给了你一本初中植物学课本,你恼羞成怒,给我这破玩意干什么,我现在想的问题这么高深,岂是一本破初中教科书能解决的了的,抓过来一把扔在了地上。此时又一阵妖风挂过,书被翻到了介绍树的一章,你望着这一页不禁发起呆来:

树干下面是树枝,树枝下是树叶,树枝下也可以是树枝,树枝下还可以是树枝、吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮,哎?这句不对,回到上面这句,树干生树枝,树枝还可以生树枝,一层套一层、梦中之梦、子子孙孙无穷匮、高中数学老师,等一下,这也是递归啊!!!我们可以把根据递归语法写出来的的代码用树来表示啊

你的初中老师仰天大笑,图样图森破,看似高科技的东西竟然靠初中知识就解决了。

优秀的翻译官

计算机处理编程语言时可以按照递归定义把代码用树的形式组织起来,由于这棵树是按照语法生成的,姑且就叫语法树吧。现在代码被表示成了树的形式,你仔细观察后发现,其实叶子节点的表达是非常简单的,可以很简单的翻译成对应的机器指令,只要叶子节点翻译成了机器指令,你就可以把此结果应用到叶子节点的父节点,父节点又可以把翻译结果引用到父节点的父节点,一层层向上传递,最终整颗树都可以翻译成具体的机器指令

完成这个工作的程序也要有个名字,根据“弄不懂原则”(该原则的解释见下文 :)

,你给这个类似翻译的程序起了个不怎么响亮的名字,编译器,compiler。

现在你还觉得二叉树之类的数据结构没啥用吗?对了,说到二叉树,在这样也推荐一份牛逼的算法刷题资料,想进BAT、TMD、快手这样的一线大厂算法绝不可忽视,认认真真过上一遍这份资料,这些大厂算法面试一关大部分题目都不在话下

至此,你完成了一项了不起的发明创造,程序员可以用人类认识的东西来写代码,你编写的一个叫做编译器的程序负责将其翻译成 CPU 可以认识的机器指令。后人根据你的思想构建出了C/C++、以及后续的Java、Python,这些语言现在还有一帮人在用呢。

总结

本文我们从最基本的晶体管一路讲解到CPU的工作原理,再从最低级的二进制机器指令到高级语言,相信如果你能读到这里定能有所收获。

最后,有同学问有没有书单,我也仔细回想自己认真读过的计算机数据,在这里也给出自认为很经典的几本,书单这东西贵精不贵多,我在这里精心挑选了10本 ,不要贪心,如果你真能把这里推荐的 10 本书读通,可以说你已经能超越 90% 的程序员了。

最后的最后,有很多知乎朋友问有没有pdf版本,我也整理出来了,绘图非常精美,这里还汇总了部分知乎问题,总计14万字,我为其专门设计了封面,并将其命名为《计算机底层的秘密》,现在免费分享给大家。

可以使用这个下载链接点击下载《计算机底层的秘密》 PDF

如果你觉得本文有所帮助,给点个赞呗! @码农的荒岛求生

作者:码农的荒岛求生

Github: github.com/xfenglu/ever

原文:你管这破玩意叫CPU?

你管这破玩意叫编程语言?

推荐:


user avatar   Ivony 网友的相关建议: 
      

我觉得如果只是想要知道原理,关键是要把知识点串起来,大体上就这么些知识点:


三极管/MOS管的原理,即半导体开关原理。即半导体可以用电平(你可以认为就是高低电压)来实现电路的通断,电路的通断又进一步可以控制电平的高低。

然后就是门电路原理,MOS管的组合可以实现各种逻辑门。

再然后是逻辑电路,逻辑门的组合可以实现运算和存储功能。


再然后就是数学推导了,我们可以轻松证明实现了运算和存储功能之后,就可以实现几乎所有的功能,甚至可以实现可编程的计算机。


这几个串起来就是CPU的工作原理。



这跟物理没啥关系,主要看你数学底子好不好……


user avatar   chen-xian-sheng-78-81 网友的相关建议: 
      

今天巴拿马的表现有点像王者荣耀里的程咬金:一个字干

孙子兵法曰:先不败而后求胜。像墨西哥很聪明,不跟你硬刚,我对后防有信心我就拖着和你打防守反击,只要你打不穿我我就不会输,几脚远射威胁也不大,让我抓住你后场漏洞我还有可能赢,这也是以弱胜强的常见措施。

但是巴拿马不干,就是喜欢跟你刚,防守反击是什么?不存在的。然而双方进攻效率是不一样的,显然这种对攻并不理智。不仅如此,巴拿马在对抗上也经常出现上头的动作,吃了5张黄牌,给下一场留下了巨大隐患。

踢足球也要靠脑子,不明智的战术布置加上技不如人,结果显而易见。但是巴拿马作为一直新进入世界杯的球队,为我们带来了一场并不乏味的比赛,他们敢打敢拼的精神也是值得鼓励的,期待他们更精彩的表现。要是国足能这样表现出对胜利的渴望,输了咱也不丢人啊。


user avatar   jamesr 网友的相关建议: 
      

好问题

这个答案其实在苹果官网文案里面已经写得很清楚了

驱动一块每秒刷新 120 次的显示屏,耗电量是巨大的,可你并不是每时每秒都需要如此快的刷新率。
有一种能效更高的思路,是为不同类型的内容设定标准帧率,比如,设定阅读的帧率为 10 fps,玩游戏的帧率为 120 fps。但这种做法的问题在于,帧率总是在不断变化的,如果游戏进入菜单界面,帧率下降到 30 fps 时,屏幕仍然保持在 120 fps 的话,这时高帧率不但没有任何好处,最终还会白白消耗大量宝贵电量。
在我们看来,电量对智能手机至关重要,不能浪费在不必要的帧上。因此,我们决定设计一套更智能的方案,可以根据不断变化的需求,自行调整刷新率。
使用 ProMotion 自适应刷新率技术无需任何设置。屏幕刷新率会根据显示内容进行调整。如果你的游戏帧率降至 30 fps,ProMotion 技术会将屏幕帧率也降至 30 fps;如果你观看的是以 24 fps 帧率录制的视频,屏幕也会以 24 fps 的帧率播放它。所有这些设计,都有助于节能省电。

我们当然知道,直接为 iPhone 用上 120Hz 刷新率,抛开电池续航不管,一切都会简单得多,但这显然不是 Apple 的风格。在你需要时提供高帧率,在不需要时为你省电,这才是我们为你贴心提供的方案。

来源:apple.com.cn/iphone-13-

理想的情况下可以达到需要高刷新的时候更流畅,不需要高刷新的时候更省电的效果。

高刷新的时候更流畅,这个我们已经在安卓机上体验过了,但是低刷新的时候更省电,也就是LTPO技术,目前确实感知不强。

而这正是iPhone pro-motion的优点,我们可以从官方的续航数据窥见一斑。对比 13pro 和 13,二者的音频播放时间都是75小时,但是视频播放时间分别是22小时和19小时,说明在省电上切实有效。对比来看,还没有安卓手机声称高刷新率的手机更省电。


user avatar   han-bing-50-80-89 网友的相关建议: 
      

曾经最喜欢的英雄是西瓜皮,没错,就是那个潮汐猎人,英文名Tide Hunter,外国人喜欢叫他TH。

西瓜皮这个英雄的特点就是,特别有辨识度。首先模型大,看起来就是不太聪明的亚子,配音像个铁憨憨,整个人绿油油的,对于男同胞来说那是相当亲切。

其次,西瓜皮的饰品号称Dota 2最良心,不仅种类繁多而且创意十足,从海景房到潜水头盔,个个辨识度爆棚。

台词那是真他娘的多,光是“我还可以吃下一条_____”,就有无数种说法,还喜欢和昆卡拌嘴。

最最重要的是,嘲讽动作居然是仰泳!居然是仰泳!居然是仰泳!

我敢说,潮汐猎人的嘲讽动作绝对是Dota 2里面最具有辨识度、使用率最高的嘲讽动作。俗话说得好,没有装备嘲讽的潮汐,对线能力至少下降一半!一个没有仰泳的潮汐是没有灵魂的!就算你全身上下的钱只够买一包辣条,我也建议你用这一包辣条的钱,买一个潮汐的嘲讽!因为这实在是太重要了!

对线的时候,反补完对面的兵,后退的时候一定要仰泳!对面来人干你,没干死你,被你跑回塔下了,一定要仰泳回去!等级高就可以骑在对面大哥脸上拉屎了,拉完就去断兵,断完一定要仰泳!把劣势路打通关,20分钟就去上高了,上高的时候一定要仰泳!跳大对面五个,大完马上接一个锚击,接完记得一定要仰泳!塔都拆完了,指挥兄弟们入泉,一定要仰泳进去!

而且,潮汐的仰泳最骚的用途就是拿来躲技能,比如躲伐木机的飞盘,躲力丸的背刺,真的是tql!

总之,潮汐猎人这个英雄的精髓在于,无论你是干人,还是被干,有空的时候,都一定要记得仰泳!如果嘲讽没有CD,我在野区走路也会放仰泳!因为仰泳可以给对方造成极大的精神损失,从而严重影响对面的竞技水平。虽然你因此可能遭到对面五个人的毒打,但是请记住,潮汐的宗旨就是仰最爽的泳,挨最毒的打。如果对面都打你,那就意味着你的大哥不会被打了。如果对面都不打你,那你就可以为所欲为了。

潮汐这个英雄玩起来非常简单,操作相当亲民,打团声音无限大,非常适合新手使用。

一技能吐口水,图标是一个水人。这个技能顾名思义,就是恶心人用的,既减速又减甲,技能伤害很可观,线上配合一个队友很容易造成击杀。出了A杖之后升级为潮吹,范围大,喷得远,而且CD降低,对清兵效率还有打团的输出都有大大的提高,可惜潮汐本身缺蓝,因此很少考虑A杖。

二技能海妖外婆,可能是最强的防守型被动,玩过丛林肉搏的都知道海妖外婆有多厉害。潮汐赖线的资本,劣单必备,点两级就可以无伤打野了,再点多两级,对面酱油点你都点到手酸。海妖外婆最最最厉害的效果在于,受的伤害到达一个临界值的时候,就可以解除大部分负面状态。每一年,类似“我跟队友讲我把潮汐沉默/弄晕了但下一秒潮汐就用皮解了沉默然后放大导致我方团灭”这样的事故,少说都有几万起。所以为什么潮汐这么难控,还经常丝血逃生,只能说海妖外婆太厉害。

三技能喵击,效果跟对自己周围一圈的人释放无影拳差不多。现在潮汐的转呼啦圈计算普攻伤害,并且可以触发攻击特效,因此电锤啊晕锤啊大炮这些都有用。但是绝大部分的玩家还是把潮汐当三号位玩,因此这个技能一般就是用来线上干扰敌方补刀,顺便自己补刀,打团降低敌方输出,也是潮汐打野的核心技能。这个技能配合二技能海妖外婆,减攻配合格挡,可以让自己变得很硬很硬,所以如果对面近战英雄多,潮汐完全可以一打N。我就曾经在线上打对面大哥加两个短手酱油,残血一打三,还反杀两个。

大招毁灭,名字听上去就相当霸气。效果就是rua的一声,然后地上冒出很多条触手捅对面屁眼。一个很强的团控,跟谜团的大招比,不需要持续施法,跟虚空的大招比,不会把队友也控住。当然缺点就是不能无视BKB,而且很容易被拉比克偷。这是潮汐打团最有存在感的一个技能,也可以说是潮汐的核心技能(说实话只有吐口水和喵击的潮汐打团的时候真的没什么用)。你可以走大,可以跳大,可以被打的时候放大,总之在对面都没有BKB的时候,潮汐的大招绝对是震慑力最强的技能之一,堪称核武器,无论先手还是反手都很好用。这个技能,你用好了就是毁天灭地,空大了顶多就是致敬ROTK。跳刀被打断导致大跳了怎么办,没关系, 作为一个潮汐,脸皮也要厚一点。大不了出个刷新,牢记大秘刷秘大的口诀,口期就是你的舞台。

总的来说,玩的好的潮汐的标准就是,骚浪贱——我就喜欢你看不惯我又干不掉我的样子。这样一个长相呆萌,打法猥琐,操作简单,不容易死,声音巨大的英雄,谁不喜欢呢?

另外,潮汐猎人的周边也是非常非常的多,关于潮汐的卡通形象,那也是相当地可爱足以看出大家对这个英雄的喜欢。有一天我在学校看到一个男生背着一个西瓜皮的书包,旁边是一个可爱妹子,你们知道我有多酸吗?

不过对于大多数人来说,他们印象最深刻的其实是这张:

我觉得船胖本人也很喜欢潮汐猎人!

Rua!


user avatar   wang-rui-chao-67 网友的相关建议: 
      

人的睡眠偏好被称为“睡眠类型”或“时型”(chronotype),具体分为早睡早起的“清晨型’(morningness),晚睡晚起的“夜晚型”(eveningness)和不早不晚的中间型,中间型占的比例可能最多,而睡眠类型一般相信是先天性加上后天环境的影响。 一般以11点睡眠为中间型的分界,题主想比较的10pm – 6am的睡眠模式属于早晨型,而2am – 10am睡眠模式属于夜晚型。

我们大脑中的下丘脑维持着人体的总生物钟,称为视交叉上核(SCN)。而人体大部分细胞器官都维持各自的子生物钟(peripheral clock)。 SCN从瞳孔接收光信息,维持大概24小时的昼夜节律,SCN通过神经系统(自主神经,autonomic nerve),荷尔蒙系统(下丘脑-垂体,hypothalamo-pituitary)等的信号(例如乙酰胆碱、褪黑素、皮质醇等)跟其他细胞器官的子生物钟沟通和同步。总生物钟SCN主要通过光线作出反应,细胞器官的子生物钟主要通过饮食和身体运动调整。 饮食包括食物质量、食物的卡路里和进食时间等都在影响子生物钟,这些饮食和运动因素称为“授时因子”(zeitgebers)。授时因子会推迟或加快大脑总生物钟的时间,生物钟的时差称为“相位偏差”(phase-shift)。所以总生物钟接收光信号后,会影响身体细胞器官的功能,而细胞器官则对进食和运动作出反应,影响大脑的总生物钟。 所以我们晚间的光线,进食时间和运动时间等,都是影响我们生物钟的“睡眠类型”的环境因素。

习惯了晚睡晚起的人都会觉得自己是夜猫子,一定是夜晚型的,相反习惯了早睡早起的一般都觉得自己是早晨型的,但其实有更科学的方法分析诊断究竟个人属于哪一个睡眠类型的:问卷方法或DLMO测试方法。问卷方法顾名思义是通过回答问卷得出量表分数,两个公认比较准确的问卷量表是“慕尼黑时型问卷.” (MCTQ) 和清晨型-夜晚型量表(MEQ),两者都有一定的准确度,但公认最准确达到是“褪黑素昼夜节律时间”(DLMO),原理是人的内源褪黑素在准备入睡前会增加分泌,DLMO是通过晚上到早上收集尿液或唾液化验评估褪黑素在不同时点分泌的状况以作出最准确的判断。有研究比对了MCTQ和MEQ跟DLMO的差异,[1]发现偏差还挺大,所以就算较为科学认可的问卷都不能准确反映人体真正的睡眠类型,我们自己猜可能就更大偏差了,也许我们不应该过早给自己下定论,自己一定就是夜晚型一定需要晚睡。光线压抑褪黑素的分泌,推迟正常睡眠时间,造成人为的“晚间型”睡眠模式,对健康造成隐患。[2]

大量研究比较过夜晚型和早晨型人群的代谢性指标发现夜晚型的人出现各种代谢性疾病更多,2015年的对照组研究,[3] 韩国的研究人员把1620名年龄在47-59岁的人群样本归类为早晨型(29.6%),夜晚型(5.9%)和不早睡也不晚睡的中间型(64.5%)。研究发现只有夜晚型的人群跟更高的代谢性疾病有关,特别是男性,夜晚型的男性患上糖尿病的风险是298%,肌肉缺乏症的风险是389%,而女性出现代谢综合征的风险也高达222%。

研究也发现夜晚型人群更容易出现胰岛素抵抗。2013年日本的一项对照组研究,[4]比对了早晨型和夜晚型的糖尿病受试者,发现夜晚型的受试者,反映中期血糖水平的HbA1c和LDL水平更高,更难控制血糖水平。

夜晚型也跟精神健康有关联性,2019年美国约翰霍普金斯大学等多家大学学者发表的研究,[5] 分析了362家学校的2.9万高中生,发现夜晚型学生出现情绪问题,行为问题的风险更高,而精神健康分数也越低,尽管考虑了睡眠时长的因素,睡眠时间越晚,出现精神健康问题的风险就还是越高。

2019年的文献回顾,[6] 也发现夜晚型的成年人跟抑郁症,药物滥用,睡眠障碍和精神障碍有关联性。

哥伦比亚大学的横断研究,[7] 也发现夜晚型的女性跟心血管疾病有关联性,夜晚型女性的心血管风险增加241%。

那为什么夜晚型的人更容易出现各种代谢性疾病和精神健康问题? 因为晚睡很多时跟不健康的饮食和“错误”的进食时间有关。 [8] 研究发现夜晚型的人晚上摄入更多的卡路里,而晚上摄入卡路里增加肥胖风险。

哈佛大学和爱荷华大学的学者在2019年发表的对照组研究,[9] 跟踪了872名受试者一年时间,得出早晨型和夜晚型受试者的饮食跟健康关系的有趣的数据。研究发现夜晚型人群在晚间摄入最多卡路里比例的,相对同是晚间型的人但晚间摄入卡路里最少比例的,肥胖风险增加5倍!夜晚型人群晚间吃碳水化合物和蛋白质多的,肥胖风险分别增加4.5倍和3.7倍,但早晨型的人没有同样的风险。

题主也问到晚上10点睡到清晨4点是否健康,其实成人的最佳睡眠时长是7到9小时,已经有大量的流行病学研究发现过短和过长的睡眠时间跟疾病和死亡率有J型或U型关系。例如青岛大学发表的荟萃分析,[10] 包括了35个研究一共150万人的样本,当中有14万个死亡案例,发现睡眠时间时长在7小时,全因死亡率最低,过短和过长的睡眠可能跟健康问题有关,最佳全因死亡全因死亡率,建议大家7小时睡眠可能可以降低死亡风险。所以一天6小时睡眠并不是最理想的。

综合上述近年的研究,人的睡眠类型有早晨型的早睡早起型,夜晚型的晚睡晚起型,和正常作息的中间型,睡眠类型受先天因素和环境因素影响,晚间光线会推迟我们的生物钟,造成人为的夜晚型睡眠类型,而夜晚型睡眠模式增加糖尿病,心血管病和精神健康风险。这些风险起码部分跟饮食模式有关,如果晚睡晚起的人可以减少晚间摄入的卡路里,实行更健康的饮食模式,研究发现可以大幅降低肥胖和代谢性风险。

参考

[1] Kantermann, T., Sung, H., & Burgess, H. J. (2015). Comparing the Morningness-Eveningness Questionnaire and Munich ChronoType Questionnaire to the Dim Light Melatonin Onset. Journal of biological rhythms, 30(5), 449–453. doi.org/10.1177/0748730

[2] Ashbrook, L. H., Krystal, A. D., Fu, Y. H., & Ptáček, L. J. (2020). Genetics of the human circadian clock and sleep homeostat. Neuropsychopharmacology : official publication of the American College of Neuropsychopharmacology, 45(1), 45–54. doi.org/10.1038/s41386-

[3] Yu, Ji & Yun, Chang-Ho & Ahn, Jae & Suh, Aly & Cho, Hyun & Lee, Seung & Yoo, Hye Jin & Seo, Ji A & Kim, Sin Gon & Choi, Kyung Mook & Baik, Sei Hyun & Choi, Dong & Shin, Chol & Kim, Na-Hyung. (2015). Evening Chronotype Is Associated With Metabolic Disorders and Body Composition in Middle-Aged Adults. The Journal of clinical endocrinology and metabolism. 100. jc20143754. 10.1210/jc.2014-3754.

[4] Iwasaki, M., Hirose, T., Mita, T., Sato, F., Ito, C., Yamamoto, R., Someya, Y., Yoshihara, T., Tamura, Y., Kanazawa, A., Kawamori, R., Fujitani, Y., & Watada, H. (2013). Morningness-eveningness questionnaire score correlates with glycated hemoglobin in middle-aged male workers with type 2 diabetes mellitus. Journal of diabetes investigation, 4(4), 376–381. doi.org/10.1111/jdi.120

[5] Gariépy, G., Riehm, K. E., Whitehead, R. D., Doré, I., & Elgar, F. J. (2019). Teenage night owls or early birds? Chronotype and the mental health of adolescents. Journal of sleep research, 28(3), e12723. doi.org/10.1111/jsr.127

[6] Kivelä, L., Papadopoulos, M. R., & Antypa, N. (2018). Chronotype and Psychiatric Disorders. Current sleep medicine reports, 4(2), 94–103. doi.org/10.1007/s40675-

[7] Makarem, N., Paul, J., Giardina, E. V., Liao, M., & Aggarwal, B. (2020). Evening chronotype is associated with poor cardiovascular health and adverse health behaviors in a diverse population of women. Chronobiology international, 37(5), 673–685. doi.org/10.1080/0742052

[8] Mazri, F. H., Manaf, Z. A., Shahar, S., & Mat Ludin, A. F. (2019). The Association between Chronotype and Dietary Pattern among Adults: A Scoping Review. International journal of environmental research and public health, 17(1), 68. doi.org/10.3390/ijerph1

[9] Xiao, Q., Garaulet, M., & Scheer, F. (2019). Meal timing and obesity: interactions with macronutrient intake and chronotype. International journal of obesity (2005), 43(9), 1701–1711. doi.org/10.1038/s41366-

[10] Shen, Xiaoli & Wu, Yili & Zhang, Dongfeng. (2016). Nighttime sleep duration, 24-hour sleep duration and risk of all-cause mortality among adults: A meta-analysis of prospective cohort studies. Scientific Reports. 6. 21480. 10.1038/srep21480.




  

相关话题

  如何看待英伟达收购以色列芯片公司 Mellanox 获中国批准?对中国市场意味着什么? 
  如何看待 AMD 2020.10.8(当地时间)发布的 Zen3 处理器?有哪些亮点和不足? 
  apple最新的A13处理器不考虑温控下,能大致等同于什么级别的PC领域的CPU和GPU? 
  为什么 CPU 主频很难超过 4GHz? 
  为什么AMD首先设计了64位架构,intel也能用啊? 
  如何评价 AMD 6 月 1 日发布的 3D Chiplets (3D V-Cache)技术? 
  需要怎样的基本知识才能看懂卡吧图吧大佬们装逼? 
  我有两个CPU,怎么比较CPU性能好坏? 
  CPU供电为啥没有跟主板24PIN供电合并成一个接口? 
  PowerPC CPU 为什么后来越来越打不过 x86,是因为酷睿吗? 

前一个讨论
如何理解质能方程 E=mc²?
下一个讨论
作为土生土长海南人,当听到一个东北人说「三亚是东北的三亚」表现出不好的情绪是太敏感了吗?





© 2025-03-19 - tinynew.org. All Rights Reserved.
© 2025-03-19 - tinynew.org. 保留所有权利