# 《并发设计模式》第55章-流水线模式-基于流水线模式优化实时统计交易额功能

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:了解流水线模式的核心原理与使用场景,初步掌握流水线模式的应用场景,能够初步结合自身项目实际场景思考如何将流水线模式灵活应用到自身实际项目中。

大家好,我是冰河~~

通过读取日志数据来实现实时分析统计交易额的功能时,将实时读取日志文件到得出最终的结果数据,都写到一个业务方法中,性能是比较低的。从业务角度分析,可以将通过读取日志数据来实现实时分析统计交易额的功能通过流水线模式分为:读取日志、分割日志、分析统计和推送大屏等几个步骤,并且不同流水线的各个步骤之间可以并行执行任务,这样能够极大的提升整体的执行效率。

# 一、故事背景

小菜在开发实时统计社区电商系统交易额的功能时,看似一个非常简单的功能,但是开发完成后,提交测试反馈的结果是性能太差。但是目前以小菜的功力无法独立解决性能差的问题。在老王的指导下,小菜明白了性能差的原因,也知道了解决这种场景问题的最佳方案是流水行模式。

在老王的指导下,小菜也知晓了到底什么是流水线模式,但是真要是自己在项目中实现流水线模式,还是有点困难的,毕竟没有流水线模式的真实项目经验。于是,小菜还是找到老王,让老王为其讲讲如何基于流水线模式优化试试统计交易额的功能。老王这个大好人,不仅为小菜讲解了如何基于流水线模式优化实时统计交易额的功能,更是将流水线的通用代码封装成了通用的框架类源码。

# 二、流程对比

优化前,按照小菜实现的流程如图55-1所示。


可以看到,优化前将读取日志、分割日志、分析统计和推送大屏的逻辑,都写到了同一个方法中,每个步骤之间都是串行执行的,读取日志后,才能对日志进行分割,分割完日志,才能进行分析统计,分析统计完才能推送到交易大屏。整个方法只有将当前结果数据推送到交易大屏后,才能读取下一批日志。由此可知,整体的执行性能是多么差。

基于流水线模式优化后的流程如图55-2所示。


可以看到,基于流水线模式优化后,可以将一个大的任务分解成若干个不同的处理阶段,每个处理阶段的输出结果数据作为下一个处理阶段的输入,并且每个阶段都会有对应的工作线程执行相应的任务和计算。所以,使用流水线处理任务时,每个任务的各个处理阶段是并行的。这种并行任务处理和计算,能够充分利用系统的CPU资源,提供任务处理和计算的效率。

# 三、类结构设计

对比前程序优化前后的流程后,我们在正式写代码之前,还需要对相关的类进行设计,类图如图55-3所示。

# 查看全文

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码