这两天搬家,身体很劳累,脑子算是没闲着。在把货物搬上楼的过程中,我琢磨了个自认为很高效的方法,本质和流式处理很像。
需求与尝试
一车货物,零零散散打了些包,停在楼下,需要搬到五楼去。劳力有三人。一开始的方案是每个人自己拿几样东西,自管自上楼去,再下楼来拿下一趟。搬了几趟后,有以下一些问题:
1. 搬运过程中,累的不是手臂,而是脚。光爬几次五楼,腿已经先受不了了。
2. 过程中为了方便,楼下车不锁,楼上门不关,这是潜在的一种风险因子。
3. 每个人在车上和楼上分别会花些时间整理货物,前者是为了携带,后者是为了摆放
流式方案
我给出的搬运方案其实也很简单,一个人负责把货物从车上运下来搬到一楼门口,另一个人负责把一楼的货物搬到三楼,另一个人负责把三楼的货物搬到五楼。实践了近二十次,效率比之前高很多,疲劳程度也有所减少。
分析
这个方案里有几个很明显的优势:
1. 一个人专门选择合适(体积和重量)的货物打包,后两人不必整顿零散的包裹
2. 每一个人搬运不超过两层,搬完后走下楼是一段喘息的时机,减缓爬楼梯的疲惫
3. 爬楼梯的人互相可以”照顾”,即爬五楼的如果动作快可以下到二楼去取货,爬三楼的有余力可以把货物放三楼半上让五楼的少走一段
4. 楼下车不用锁,一楼的人在更短时间内可以折返;楼上门不用关,五楼的人在很短时间内可以回去,并花部分时间整顿包裹
5. 有一个人不用爬楼梯,且三人不用走多余的趟次,从下往上顺序结束自己的任务
本质上这种搬运方式就是流水线,每个人各司其职,让每一堆货物从车搬上楼的延时最低,同时,把人看做计算资源的话,爬楼梯和下楼梯是两类处理任务,类似前半段是CPU密集型的,后半段CPU使用率不高,只有一些IO开销,所以人不会感觉太累。
这种方式还有几个别的优势。它有一种类似”背压”的机制:上层的人搬运的快慢可由下层的人感知,从而调节自身的搬运速度,从而影响整体延时。还有一点是计算单元之间存在控制消息:一个人告诉其他人”最后一趟了”或者”这趟好重”,其他人可以对应做出调节。最后一点,三个人的总体能是共享的:像我之前说的,搬得快的人可以为慢的人多分担一些楼梯步数,在每一趟货物的运输过程中互相帮助,整体的资源利用率可以达到比较优。