为什么计算机只能做⼀件事,但是在我们看来却能同时做很多
事情呢?
为什么CPU好像同时能做很多事?
在我们⽇常使⽤计算机时,它好像很厉害,能同时做好多好多件事。⽐如我们可以边听⾳乐边聊天边下载⽂件,还能同时开好多⽹页同时运⾏,当然也能再开⼀个贪玩蓝⽉让他⾃⼰玩⾃⼰。但是其实这些事情都不是同时发⽣的,这些事情都是计算机⼀件⼀件地做的。如果你家电脑的CPU(中央处理器,计算机的⼤脑)是多核⼼的,那么他才能同时做很多件事(我们可以⼤致认为这个事件的数量和CPU核⼼数相同,其实有⼀些超线程技术可以增加同时执⾏的任务数量,但是这不是本⽂讨论的重点)。但是我们通常⽤的CPU⼀般也就四核或者双核的,为什么还是能同时做好多件事呢?(本⽂中都假定计算机的CPU是单核⼼的,即同⼀时间只能执⾏⼀个任务)
今天在b站看到⼀个视频,突发灵感,我觉得如果⽤这个例⼦讲⼀定能明⽩。
这个东西我们⼩时候肯定都接触过,⼀⾯是鸟笼,⼀⾯是⼀直⼩鸟,当我们飞速旋转这个纸⽚的时候,它看起来就像⼩鸟在鸟笼⾥⼀样。这是因为⼈眼是存在视觉极限的,当某种东西的速度快到⼀定程度的时候我们就觉得他好像就发⽣在⼀瞬间。光就是很明显的例⼦,当我们打开灯的时候光好像⼀瞬间就铺满了整间屋⼦,但是我们都知道光是有速度的,只不过⾮常⾮常快。
其实真正地原因是因为⼈眼的视觉暂留现象,视觉实际上是靠眼睛的晶状体成像,感光细胞感光,并且将光信号转换为神经电流,传回⼤脑引起⼈体视觉。感光细胞的感光是靠⼀些感光⾊素,感光⾊素的形成是需要⼀定时间的(摘⾃)
⽽现代计算机普通的CPU⼀般每秒能运算⼏亿到⼏⼗亿次,⽐如我们⽤⼀个CPU边放视频边和别⼈打字聊天,CPU就会以极快的速度来切换两个任务(其实任务的切换是操作系统来做的,操作系统就是计算机的管家,管理和调度计算机资源,让计算机资源更⾼效地被我们利⽤),快到让你感觉两件事情好像在同时发⽣的,就像我们感觉光是瞬间铺满整个屋⼦⼀样,这样应该就会清晰很多了吧(不过现在的CPU都是多核⼼的,四核的就可以⼤致理解为能同时做四件事,英特尔的i5和i7都是四核的,⽽i3是双核的)。
量⼦计算机和现代计算机地区别
博客为什么没人用了⽽量⼦计算机和现在计算机最本质的区别就是可以真正地实现并⾏计算(可以同时做很多件事),这是因为量⼦的叠加态,就是⼀个量⼦可以同时拥有很多状态,每种状态可以代表⼀种信息,这样就好像学会了分⾝术⼀样。
补充
但是并不能认为我们的⼀个操作就是CPU运算⼀次,CPU的运算意思是说进⾏⼀次算术运算或逻辑运算(例如两数相加),⽽通常我们的⼀个操作可能会让CPU执⾏很多很多运算。⽐如计算⼀个乘法,很久以前的CPU都⽆法直接计算乘法,⽽是⼀个⼀个地加起来的,那时候加法才是所有算术运算的基本操作,所有减乘除都是⽤加法来实现的,就像英⽂⾥⾯的26个字母构成了成千上万的单词⼀样,计算机所有复杂的功能都是由简单的加法和⼀些其他简单的操作组合成的(不过现在的CPU通常都有专⽤的乘法器了)。操作系统的历史
很久以前的计算机是由⼀个输⼊设备(例如我们现在使⽤的⿏标键盘),⼀个主机(就是⽤于计算的设备,例如CPU),⼀个输出设备(向我们展⽰结果的设备,例如我们现在⽤的显⽰器)。
⽽且那时候的计算机由于没有存储设备(例如我们现在⽤的硬盘就是存储设备),是不会执⾏多个任务的(就是必须上个任务执⾏完了下⼀个⼈才能来使⽤他),⽽且那时候计算机都⾮常⾮常昂贵,通常⼀个⼤学都只有⼀台。那时候⼈们就得将⾃⼰想要让计算机完成的事先写成代码写在纸上,然后去排队使⽤计算机,等排到⾃⼰了,才能将⾃⼰的代码输⼊到计算机⾥⾯,⼀旦出错了就⾮常⿇烦,要重新回去看看⾃⼰哪⼀点写错了,然后再来重新排队。⽽且相对于⼈来说计算机的速度是⾮常⾮常快的,换⼈的时间或者向计算机输⼊代码的时间计算机可能就可以完成好多任务了。
批处理系统
那就有⼈想了,我能不能添加⼀个存储设备,然后⼀股脑把好⼏个任务全都输⼊进去,然后就不⽤管他了,让他⾃⼰⼀个⼀个运⾏吧。虽然计算机的价格⾮常⾮常昂贵,但是相对来说输⼊设备还是要便宜很多的,我们就可以将很多键盘显⽰器接到同⼀台计算机上⾯(那时候⽤的穿孔卡带,并不像我们现在⽤的⿏标键盘),这样每个⼈想⽤的时候都可以向计算机输⼊⾃⼰的代码,等待执⾏。那这么多任务计算机这个智障怎么知道我到底该做哪⼀个了,这时候多任务操作系统(其实严格地说应该叫批处理系统)就诞⽣了,他来帮助计算机将这些任务排好队,当计算机闲下来的时候操作系统就将队伍⾥⾯的任务扔给计算机让他⼲活。这就好像⼯⼚的流⽔线⼀样,⼯⼈们轮班⼲活,让机器⼀直处于⼯作状态才能最⼤化⼯⼚的收益。
分时操作系统
但是这时候⼜出现了⼀个问题,有些⼈的任务可能⾮常⾮常耗时,有些⼈的任务可能计算机⼀下⼦就能完成,那如果计算机当前执⾏的任务要算个⼗天半个⽉,那别的⼈岂不是都⽤不了了。这样有的⼈⼼⾥就很不平衡,他想我能不能想⼀个办法让计算机既执⾏我的⼩任务,⼜执⾏⼤任务呢。后来他终于想到⼀个办法,假如我每隔⼀毫秒让计算机将当前的任务先放起来(这⾥⼀毫秒只是举个例⼦),执⾏任务队列⾥⾯的下⼀个任务,那么即使当前计算机有⼀个很⼤的任务要执⾏个⼗天半个⽉,我也可以不⽤等那么长时间就可以让计算机把我的⼩任务给执⾏完。
举个例⼦:⽐如我有⼀个任务A和⼀个任务B,将任务A划分成5步完成,将任务B划分成四步完成。分时操作系统就是执⾏A的第⼀步,将A暂停;执⾏B的第⼀步,将B暂停;执⾏A的第⼆步……
回到开头的那个例⼦,如果卡⽚转的⾜够快的话,看起来就好像⼩鸟在笼⼦中⼀样。那如果任务A和任务B的每⼀步执⾏的时间都⾮常⾮常短的话,那我们⽤起来就好像两个任务在同时执⾏⼀样。这样如果⼀台昂贵的计算机接了很多套键盘显⽰器的话,每个⼈都向计算机中输⼊⾃⼰的代码,计算机就飞快地交替着执⾏他们的任务,这样每个⼈都感觉好像只有⾃⼰⼀个⼈独⾃占有了⼀台计算
机⼀样。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。