作者个人研发在高并发场景下提供了一个简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。开源半年多以来,已成功为十几家中小企业提供精准定时调度解决方案,经受住了生产环境的考验。为了造福更多童鞋,这里提供一个开源框架地址:https://github.com/sunshinelyz/mykit-delay写在前面流水线技术是计算机中非常重要的技术。简单地说,流水线技术的出现使计算机能够支持并行计算,并行执行任务。虽然流水线技术很重要,但是很多小伙伴对流水线技术的了解还是很少,甚至很多小伙伴都不知道什么是流水线技术。今天,我们就来说说什么是流水线技术。文章已收录于:https://github.com/sunshinelyz/technology-binghehttps://gitee.com/binghe001/technology-binghe流水线概念流水线是指程序运行时多条指令重叠的准操作被执行。并行处理的实现技术。各部件同时处理是针对不同的指令,它们同时作用于多条指令的不同部分,从而提高各部件的利用率和指令的平均执行速度。流水线相关参数的计算包括:流水线执行时间计算、流水线吞吐率、流水线加速比、流水线效率。在计算机中,指令的运行主要分为取指令、解析和执行三个部分。如下。如果执行value、analyse和execute各需要1ms,那么3条指令串行执行的时间总共需要9ms。这是因为一个执行的操作需要经过抓取、解析、执行三个步骤。每一步需要1ms。执行一条指令的时间为3ms,连续执行3条指令的时间为9ms。我们可以用下图来表示这个过程。在上图中的表示中,执行3条指令,用9ms好像是没问题的。但是,如果我们对图形进行改造,就会发现相应的问题。我们用下图来表示三个指令的执行。这时我们发现在执行上图指令操作的过程中,有很多空白格子,这些空白格子说明在执行过程中有空闲的时间片资源没有被使用。显然,在执行指令2之前不需要等待指令1执行完,同样,在执行指令3之前也不需要等待指令2执行完。而且,我们发现需要9ms才能执行按照上图执行三个指令。这时候如果利用空闲时间片,可以用下图来表示。此时,在执行3条指令的过程中,取指操作取完指令1后,立即取指令2,然后立即取指令3;分析操作也执行指令1,分析完后,立即分析指令2,然后立即分析指令3;执行操作也是在执行完指令1后立即执行指令2,然后立即执行指令3上的操作,期间充分利用了空闲时间片资源。而且我们发现,充分利用空闲时间片后,3条指令的执行时间从原来的9ms变成了现在的5ms。换个角度,我们发现执行第一条指令时,需要3ms,而执行第二条指令时,只需要在执行完第一条指令后增加1ms。同样,当执行第三条指令时,只需要在第二条指令执行后增加1ms。以后每增加一条指令,只需要增加1ms的时间就可以执行这条指令。这就是计算机中的流水线技术。接下来说一下与流水线技术相关的计算问题。流水线计算关于流水线计算,我们先看一张图。在上图中,我们可以看到第一条指令执行时,耗时3ms。执行第二条指令时,只需要在第一条指令的基础上增加1ms;执行完第三条指令后执行一条指令时,只需要在执行完第二条指令后增加1ms。以此类推,当执行到第n条指令时,执行第n-1条指令只需要增加1ms即可。说到这里,不知道小伙伴们有没有想过这样的问题。流水线技术的这个规律涉及到一个很重要的概念,叫做流水线循环。流水线周期是执行时间最长的部分。上图中流水线周期的计算公式为1ms流水线:1条指令执行时间+(指令数-1)*流水线周期。流水线的理论公式如下。(t1+t2+...+tk)+(n-1)*△t其中t1,t2...tk表示执行每一步指令所需要的时间,n为指令条数,△t为流水线循环。管道的实用公式如下所示。k*△t+(n-1)*△t其中,k为执行一条指令的步数,n为指令数,△t为流水线周期。在这里,让我举个例子。例如,一个执行的执行过程可以分解为抓取、解析和执行三个步骤。在取指时间tfetching=3△t,分析时间analysis=2△t,执行时间texecution=4△t的情况下,如果以串行方式执行,执行完10条指令需要多少△t?如果以流水线方式执行,流水线周期△t是多少?使用流水线方式时,执行10条指令需要多少△t?(1)串行方式比较简单,就是把每条指令的执行时间累加起来。(3△t+2△t+4△t)*10=90△t。(2)在执行一条指令的过程中,取指用时3△t,解析用时2△t,执行用时4△t。根据流水线中流水线周期的定义:流水线周期是执行时间最长的一段,所以流水线周期为4△t。(3)使用流水线方式时,执行10条指令所需的时间可以用以下方法计算。这里,我们分别计算理论时间和实际时间。理论时间(3△t+2△t+4△t)+(10-1)*4△t=45△t。练习时间3*4△t+(10-1)*4△t=48△t。超标量管道关于超标量管道,我们可以用下图来表示。在超标量流水线中,有一个叫做度的概念。度以超标量流水线表示,该流水线由多个流水线组成。比如上图中,超标量流水线由两条流水线组成,所以度为2。此时,超标量流水线可以同时进行两种操作。也就是说,可以同时执行两个取操作,可以同时执行两个分析操作,可以同时执行两个执行操作。如果此时有10条指令要执行,使用上面的超标量流水线,只需要10/2=5条指令。流水线吞吐量计算流水线吞吐量(TP)是指流水线完成的任务数量或单位时间内输出结果的数量。计算管道吞吐量过程的最基本公式如下所示。管道最大吞吐量的计算公式如下。管道的吞吐量计算问题比较简单。本文转载自微信公众号“冰河科技”,可通过以下二维码关注。转载本文请联系冰川科技公众号。
