关注这个领域其实已经很久了,尤其是在高性能服务器领域,这是最核心的问题。但最近回想起来发现其实很多时候没有把最基本也是最根本的问题弄清楚,做了很多无用功,浪费了不少时间。这里我所说的基本和根本的问题就是I/O的模型问题,其实是现实世界发展变化的浓缩,本源问题想不清楚,其他的都是废话。
最近在网上看到一篇写的不错的科普贴(末尾给出链接),可能也是作者对别人的材料进行深度加工而成,我这里其实也是对这篇文章进行炒剩饭,但给出了自己,可能也包括很多朋友的一点疑惑和思考,希望各位在阅读的时候也深入思考,我们一起交流。
Linux的世界里面,一切皆文件,而文件最大的行为就是读写(Input/Output),不同的文件有不同的读写方式,如传统磁盘设备需要通过机械式寻道+数据传输,网络设备需要将数据写到网卡设备的缓冲区......咋看起来这很简单,但问题就出现在人民群众越来越高的需求与相对较低的生产力之间的不匹配,计算机世界中的人民群众指的是应用程序,而相对较低的生产力很多时候特指这些IO设备,于是一对难以调和的矛盾就产生了:应用程序要求底层执行越来越快,而底层却受限物理特性,只能龟速发展。产生这篇博客的根源就是如何缓和这对阶级之间的巨大矛盾?
既然物理上的限制暂时无法有一个大的突破,那么我们只能在上层和中间层做点文章,玩点把戏了,在做文章之前我们仔细地分析下问题所在。
原始社会
一切混沌初开,我们所能做到的只是食可果腹,衣可蔽体,不奢望山珍海味,锦缎丝绸。应用程序对底层性能没有那么高的要求,因为本身没有那么大的需求,我们想想最初的互联网用户数量就知道了,所以即使下层慢点,也不会对外有多大的影响。这个时候我们的应用程序可以这么做: