为什么电脑只能做一件事,但是在我们看来却能同时做很多事情呢?

为什么CPU好像同时能做很多事?

在我们日常使用计算机时,它好像很厉害,能同时做好多好多件事。比如我们可以边听音乐边聊天边下载文件,还能同时开好多网页同时运行,当然也能再开一个贪玩蓝月让他自己玩自己。但是其实这些事情都不是同时发生的,这些事情都是计算机一件一件地做的。如果你家电脑的CPU(中央处理器,计算机的大脑)是多核心的,那么他才能同时做很多件事(我们可以大致认为这个事件的数量和CPU核心数相同,其实有一些超线程技术可以增加同时执行的任务数量,但是这不是本文讨论的重点)。但是我们通常用的CPU一般也就四核或者双核的,为什么还是能同时做好多件事呢?(本文中都假定计算机的CPU是单核心的,即同一时间只能执行一个任务)

今天在b站看到一个视频,突发灵感,我觉得如果用这个例子讲一定能明白。

15890349340431589034910495

这个东西我们小时候肯定都接触过,一面是鸟笼,一面是一直小鸟,当我们飞速旋转这个纸片的时候,它看起来就像小鸟在鸟笼里一样。这是因为人眼是存在视觉极限的,当某种东西的速度快到一定程度的时候我们就觉得他好像就发生在一瞬间。光就是很明显的例子,当我们打开灯的时候光好像一瞬间就铺满了整间屋子,但是我们都知道光是有速度的,只不过非常非常快。

其实真正地原因是因为人眼的视觉暂留现象,视觉实际上是靠眼睛的晶状体成像,感光细胞感光,并且将光信号转换为神经电流,传回大脑引起人体视觉。感光细胞的感光是靠一些感光色素,感光色素的形成是需要一定时间的(摘自百度百科

而现代计算机普通的CPU一般每秒能运算几亿到几十亿次,比如我们用一个CPU边放视频边和别人打字聊天,CPU就会以极快的速度来切换两个任务(其实任务的切换是操作系统来做的,操作系统就是计算机的管家,管理和调度计算机资源,让计算机资源更高效地被我们利用),快到让你感觉两件事情好像在同时发生的,就像我们感觉光是瞬间铺满整个屋子一样,这样应该就会清晰很多了吧(不过现在的CPU都是多核心的,四核的就可以大致理解为能同时做四件事,英特尔的i5和i7都是四核的,而i3是双核的)。

量子计算机和现代计算机地区别

而量子计算机和现在计算机最本质的区别就是可以真正地实现并行计算(可以同时做很多件事),这是因为量子的叠加态,就是一个量子可以同时拥有很多状态,每种状态可以代表一种信息,这样就好像学会了分身术一样。

补充

但是并不能认为我们的一个操作就是CPU运算一次,CPU的运算意思是说进行一次算术运算或逻辑运算(例如两数相加),而通常我们的一个操作可能会让CPU执行很多很多运算。比如计算一个乘法,很久以前的CPU都无法直接计算乘法,而是一个一个地加起来的,那时候加法才是所有算术运算的基本操作,所有减乘除都是用加法来实现的,就像英文里面的26个字母构成了成千上万的单词一样,计算机所有复杂的功能都是由简单的加法和一些其他简单的操作组合成的(不过现在的CPU通常都有专用的乘法器了)。

操作系统的历史

很久以前的计算机是由一个输入设备(例如我们现在使用的鼠标键盘),一个主机(就是用于计算的设备,例如CPU),一个输出设备(向我们展示结果的设备,例如我们现在用的显示器)。

img

而且那时候的计算机由于没有存储设备(例如我们现在用的硬盘就是存储设备), 是不会执行多个任务的(就是必须上个任务执行完了下一个人才能来使用他),而且那时候计算机都非常非常昂贵,通常一个大学都只有一台。那时候人们就得将自己想要让计算机完成的事先写成代码写在纸上,然后去排队使用计算机,等排到自己了,才能将自己的代码输入到计算机里面,一旦出错了就非常麻烦,要重新回去看看自己哪一点写错了,然后再来重新排队。而且相对于人来说计算机的速度是非常非常快的,换人的时间或者向计算机输入代码的时间计算机可能就可以完成好多任务了。

批处理系统

1

那就有人想了,我能不能添加一个存储设备,然后一股脑把好几个任务全都输入进去,然后就不用管他了,让他自己一个一个运行吧。虽然计算机的价格非常非常昂贵,但是相对来说输入设备还是要便宜很多的,我们就可以将很多键盘显示器接到同一台计算机上面(那时候用的穿孔卡带,并不像我们现在用的鼠标键盘),这样每个人想用的时候都可以向计算机输入自己的代码,等待执行。那这么多任务计算机这个智障怎么知道我到底该做哪一个了,这时候多任务操作系统(其实严格地说应该叫批处理系统)就诞生了,他来帮助计算机将这些任务排好队,当计算机闲下来的时候操作系统就将队伍里面的任务扔给计算机让他干活。这就好像工厂的流水线一样,工人们轮班干活,让机器一直处于工作状态才能最大化工厂的收益。

分时操作系统

但是这时候又出现了一个问题,有些人的任务可能非常非常耗时,有些人的任务可能计算机一下子就能完成,那如果计算机当前执行的任务要算个十天半个月,那别的人岂不是都用不了了。这样有的人心里就很不平衡,他想我能不能想一个办法让计算机既执行我的小任务,又执行大任务呢。后来他终于想到一个办法,假如我每隔一毫秒让计算机将当前的任务先放起来(这里一毫秒只是举个例子),执行任务队列里面的下一个任务,那么即使当前计算机有一个很大的任务要执行个十天半个月,我也可以不用等那么长时间就可以让计算机把我的小任务给执行完。

24A4EAAFCE92DF0F1BF24CE072ADC69E

举个例子:比如我有一个任务A和一个任务B,将任务A划分成5步完成,将任务B划分成四步完成。分时操作系统就是执行A的第一步,将A暂停;执行B的第一步,将B暂停;执行A的第二步……

回到开头的那个例子,如果卡片转的足够快的话,看起来就好像小鸟在笼子中一样。那如果任务A和任务B的每一步执行的时间都非常非常短的话,那我们用起来就好像两个任务在同时执行一样。这样如果一台昂贵的计算机接了很多套键盘显示器的话,每个人都向计算机中输入自己的代码,计算机就飞快地交替着执行他们的任务,这样每个人都感觉好像只有自己一个人独自占有了一台计算机一样。

Donate comment here