【冬瓜哥熊文】大话流水线(2)~队列、时延与并发

本文通过工厂流水线的例子探讨了在处理流程中队列的作用,如何利用队列缓解上下游处理速度不匹配的问题,以及队列深度、并发度与时延之间的关系。介绍了队列作为缓冲区能实现工序的松耦合,增加系统的灵活性,并讨论了在计算机程序中使用异步FIFO队列来实现流水线。同时,分析了队列长度对时延和吞吐量的影响,指出在处理速度恒定时,队列深度不影响吞吐量,但增大队列深度会增加平均时延。最后,讨论了并发度如何影响时延,并指出流水线技术在提升总体吞吐量和降低特定业务时延方面的重要性。
摘要由CSDN通过智能技术生成

        对于一个传递链,不管是同步还是异步流水线,其中每个角色都需要从上游角色接收物品/消息,以及向下游角色传递物品/消息。具体如何传递?如果是实际产品包装流水线的话,那么不可能是用手去传递的,我处理完用手递给你,除非离得近,以及每次你都能在我胳膊发酸之前接过去。更方便的做法是,我将处理完的物品放到一个你我都可以方便摸得着的地方,比如一个工作台上,我只要放上去就行了,根本不用管下游操作者处于什么状态。只要大家都在全速工作,不出什么问题的话,我下一次打算往上放东西的时候,会发现原来那件物品总是能被及时的被下游操作者拿走。

        然而,不能保证总不出问题。比如下游操作者突然走神了,没来得及拿走上游放在工作台上的物品,则上游打算传递下一个物品的时候,就会停住,同时也不再继续从它自己的上游那里拿走待处理物品,这会一层层反馈到源头,导致传递链停顿,或者叫Stall,阻塞

        厂长一看急了,这不行,动辄就停顿,太影响生产效率。那么你认为厂长应该如何解决这个问题?估计你也想得出来,那就是把工作台面拉长一些,弄个传送带和挡板,上扔过来的物品被源源不断传送过来(假设传送带速度非常快,忽略物品在传送带上传输的时间),并且堆积在处于下游较色眼前的挡板处。如果大家全速运行,那么任意时刻挡板处最多只有一件物品出现。一旦下游由于各种原因处理速度变慢,或者瞬间有卡顿,那么上游依然可以往传送带上放置处理完的物品,此时会发现下游的挡板处有物品堆积,下游卡顿时间越长,堆积越多,如果一直堆积到上游跟前,那么上游就知道传送带已满,就会停止处理,同理,上游的上游的传送带就会逐渐堆积,一直反馈到源头,最终导致卡顿的那个人之前的所有人都停止处理,但是卡顿的人和其下游的人会继续处理。当上游发现传送带上有空余位置的时候,就继续处理并向上放置物品,逐渐恢复流水线的运行。下游此时可以一过性加快处理速度,将传送带上的物品加速消耗,传送带中物品堆积数量越来越少,最终少到1的时候,可以恢复原来的处理速度。或者下游继续按照原有速度处理,那么此时就会在传送带上永久积压着满传送带的物品,除非源头不再有物品需要处理。

        这样做的好处是将流水线上的每个工序解耦,从紧耦合变为松耦合。其本质上是在每两道工序之间加大了缓冲空间,之前缓冲空间只有1,相当于没有缓冲。至于这个缓冲空间需要有多大,一般取决于该队列下游工序的处理速度,越快,则相应的应当增加上游缓冲的空间,这样的话上游可以向该缓冲空间内存放大量的物品,以供下游角色消耗,一旦上游出现瞬间卡顿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值