在看今年Flink峰会的一些演讲,收获良多。不过毕竟不是学计算机出身,好多计算机相关的概念都从来没听说过,都要一点点补回来。
关于I/O-bound和CPU-bound,我的理解是计算机在处理某个任务的时候,主要时间花在什么地方,就是被什么所“束缚”。比如主要时间消耗在CPU计算上,也就是说处理该任务大部分时间都在等待CPU的计算而不是等待读写(硬盘/内存)数据,那么就是CPU-bound,我称之为CPU束缚型。反过来如果主要时间消耗在等待读写数据而CPU利用率很低,那么该任务就是I/O-bound,I/O束缚型。
举个夸张一点的例子,
假设有一道数学题,题干只有一行字,但是需要运用各种各样的数学方法,方程,定理,甚至作图才能解答,即使最牛逼的数学家也需要1个月才能解出来,这样的“数学题”就是CPU-bound。阅读题干的时间只有短短几秒,然而理解它并且解答它的时间是阅读的几百万倍,这种题目从列出到被解答完的时间大部分都消耗在这个数学家用大脑(CPU)解题上。也可以说数学家的大脑是几乎无时无刻不在工作的(CPU利用率几乎100%)。
反过来说。
假设有一道数学题,题干有史记那么厚,读完就要2个月,然而最后的问题只是让你回答1+1=?,那么这种题就是I/O-bound。从列出到被解答完毕的时间大部分都消耗在阅读题干(I/O操作)上,数学家一直在读写,而思维处于停滞状态(CPU IDLE状态)。
然而现状是计算机在硬盘甚至内存的存取速度上都比CPU的计算速度慢得多的多,可以理解为这个数学家虽然思维极度敏捷,但是老花眼,此时再碰上史记那么长的题干,简直爆炸,无法想象。
那么如何克服这种现状呢,首先,想方设法提高I/O读写速度,类似SSD的出现,但是相比于CPU的计算速度,仍然差之千里,而且费用昂贵;其次,在CPU等待I/O读写的时候,可以让它去计算些别的问题,只要它不闲着,也算没浪费时间啊。