莉莉喜欢喝红茶,但是茶壶的茶十分烫,得晾一会儿才能喝。
最开始,莉莉只用一个杯子喝茶,喝茶的步骤为:
- 从茶壶里倒茶到杯子里
- 等待杯子里的茶凉一会儿
- 喝茶到杯空
- 反复以上步骤
由于莉莉喝茶的速度远快于茶凉的速度,因此在大部分时间里,莉莉都在等茶凉。
宇航员见状,于是便把自己杯子的茶也给莉莉喝,此时喝茶的步骤为:
- 从茶壶里倒茶到杯子1喝杯子2
- 等待杯子里的茶凉
- 莉莉开始喝杯子1的茶到杯空
- 从茶壶里到茶到杯子1
- 莉莉开始喝杯子2的茶,直到喝空
- 从茶壶里倒茶到茶壶2
- 此时,杯子1的茶也差不多凉了,此时重复步骤3-6
明明茶凉的速度没有并快,喝茶的速度也没有变慢,但莉莉却实现了喝茶永动,真是非常的amazing啊。
宇航员见状便思考,咦,这不是double buffer吗,计算机里的技巧原来在生活中也处处都是呀。
一个杯子就相当于一个buffer,茶凉的过程就相当于是在准备数据,而莉莉喝茶的过程,就相当于是消耗数据的过程。当消耗速度远超生产速度时,两种操作发生在不同引擎,可以并行的时候,就可以考虑使用double buffer,甚至multi buffer, 提高各引擎的并行度,减少消费者空转的时间(也是就等待茶凉的时间)。俗称:打满。