这两天在看《操作系统实用教程》,打算补补自己所欠缺的计算机相关知识。在学习过程中我发现一件有趣的事情,操作系统和指弹吉他这两个看似风马牛不相及的领域在某些地方竟然有着一定的相似性,下面我将慢慢分析。
学习操作系统的过程中,可能我们最先接触是“并发”(Concurrent)的概念。有别于“并行”(Parallel Processing)(多道程序同时在不同的CPU上执行),它指的多道程序分时地运行在同一个CPU上面。由于各个程序的切换时间很短(ms级),给人的感觉就是这些程序是在同时运行的,这也是为什么你的计算机只有一个CPU(现在更多的是双核或四核),你却可以用它同时听歌、上网、写代码的原因。总的来说,并发的特点就是——微观上,CPU在某一时间只运行一道程序;宏观上,多道程序“同时”运行。采用并发的方式运行程序能够提升CPU的使用效率,协调计算机内部硬件的速度(CPU速度很快,而一些输入输出设备则很慢),是现代操作系统的一个基本特征。
非常有趣的是,指弹吉他(Finger-Style)也是采用了并发的思想!让我们先看一首指弹吉他曲子演奏视频:
看完也许你还沉浸在意大利指弹新秀Luca那激情四射的表演之中,折服于他那精湛的演奏技巧。先暂时收好你的震惊,让我问问你,在曲子中你听到了几种乐器效果?我想即便乐盲也应该能听到至少两种:吉他和鼓(当然,没有吉他还能叫指弹吉他?)。建议你再去听听AC/DC乐队的Thunderstruck,那是这首曲子的原始版本。听完后你会发现,Luca的指弹曲对原曲还原的十分逼真,各个乐器和声部都有体现,而他只用了一把吉他就实现了!
实际上指弹吉他就是通过一把吉他去模拟一支乐队这样的音乐风格,模拟的对象包括吉他、贝斯、鼓、和声等等。由于人只有两只手,要想模拟众多乐器同时发声是很难的(最多只能左右开弓),所以为了能让这些乐器“同时”发声,指弹吉它手需要在一个音乐片段中,依次模拟每种乐器,在下一个音乐片段中再重复操作,就像一颗CPU在并发地执行不同的程序(这样的调度方法更像时间片轮转)。而当演奏速度快到一定程度时,由于听觉的“暂留效果”,人耳会觉得这些乐器是同时进行的,于是产生了一把吉他弹出一支乐队的效果。