性能优化高手课
尉刚强
资深软件设计咨询顾问
19574 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 31 讲
性能优化高手课
15
15
1.0x
00:00/00:00
登录|注册

02 | 并行设计(上):如何利用并行设计挖掘性能极限?

你好,我是尉刚强。
在计算机领域,由于 CPU 单核性能的增⻓逐渐停滞,而我们面临的业务问题复杂度却在不断地上升,为了更好地解决这个冲突,在 CPU 中增加核数就成为了一种默认的应对方案。而通常来说,我们会借助并行设计来充分发挥硬件多核上的运行性能。
不过,在 CPU 多核的场景下,要想通过并行设计将计算负载均衡到每个 CPU 核上,以此减少业务处理的时延,将软件性能提升至最大化,依然存在着很大的挑战
为什么这么说呢?不知道你在实际的业务场景中有没有发现,由于并行拆分不合理,而导致产品性能不可控,甚至是恶化的现象非常普遍。另外,由于程序员普遍会存在串行编程的惯性思维,在并发同步互斥实现中引入的故障难以定位,也很容易导致产品在较长时间里处于不可用状态。而这些问题,都会对我们的软件性能产生直接影响。
所以这节课,我就来给你介绍 6 种针对不同业务问题的典型并行设计架构模式,以此让你在面对实际的业务问题时,能快速准确地挖掘业务中的并发性,找到适合产品的并行设计架构。而同步互斥作为并行设计中的一个难点,如果你希望能高效解决,需要对其有很深入的理解认识,我将在下一节课单独介绍。

并行计算模型

在开始讲解具体的并行设计架构模式之前,我想先带你了解一下并行计算模型。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了并行设计的重要性以及如何利用并行设计来挖掘性能极限。作者首先指出了在CPU多核场景下,通过并行设计将计算负载均衡到每个CPU核上以减少业务处理时延的挑战,并介绍了6种针对不同业务问题的典型并行设计架构模式。在介绍这些架构模式之前,作者先带领读者了解了并行计算模型,包括并发执行单元、同步交互等基本概念。接着,作者详细介绍了6种并行设计架构模式,包括计算逻辑、结构数据、信息交互等方面的规则性拆分。此外,作者还强调了每种架构模式中的隐式约束条件,以帮助读者避免引入故障,降低代码开发的实现复杂度,并最大化地挖掘并行设计架构模式的性能。整体而言,本文通过介绍并行设计的基本概念和具体架构模式,为读者提供了在面对实际业务问题时如何进行并行设计的指导。 文章总结了四种并行设计架构模式,分别是任务线性分解架构、任务分治架构、数据几何分解架构和递归数据架构。每种架构模式都针对不同的业务问题提供了相应的并行设计方案,涵盖了计算逻辑、数据结构和任务拆分等方面。作者还强调了每种架构模式的适用场景和隐式约束条件,帮助读者在实际应用中避免潜在的问题。这些内容对于需要在多核CPU场景下优化业务处理性能的技术人员具有重要参考价值。 在具体介绍了四种架构模式后,作者还进一步介绍了数据流交互架构和异步交互架构两种并行设计模式。数据流交互架构适用于单向确定性的消息交互场景,例如大数据领域中的ETL和嵌入式领域中的网络协议栈处理。而异步交互架构则适用于需要与多个任务进行消息交互的场景,如微服务架构中的业务功能处理。每种架构模式都有其特定的设计特点和隐式约束条件,需要根据实际业务需求进行选择和应用。 总的来说,本文通过介绍并行设计的基本概念、具体架构模式以及其应用场景和隐式约束条件,为读者提供了全面的并行设计指导,帮助他们在实际业务场景中优化性能,降低代码复杂度。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能优化高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 型火🔥
    这种高纬度的抽象信息量很大, 每一条都值得细细品味和与已有知识或者实践去关联,印证. 好东西不在多,在于精, 咀嚼.

    作者回复: 嗯嗯,看来你也是喜欢思考的人,那咱们是同路人,文章是抽象力度比较大,也是对自己多年工作经验的提炼!

    2021-05-23
    5
  • 云彩&草原
    “当消息通信满⾜单向⽣产者消费者模式时,数据流交互架构可以避免使⽤互斥锁,达到消息的⾼效率交互”,请教下,为啥可以避免使用锁?
    2021-10-09
    2
  • 槑·先生
    确实比较抽象,如果每个模式下都能给一个简单的例子就好了。
    2021-09-22
    1
    2
  • Geek_00c974
    能感觉到作者在克制使用很具体的例子,生怕读者理解成是某个具体场景的解决方案,其实作者更想让大家从高度抽象的角度出发,不局限解决某个场景。其实在读的过程中,有经验的读者就应该脑海里蹦出一个具体的场景了。
    2023-11-22归属地:广东
  • LT
    好多 ⾊ 排版有问题?
    2022-12-31归属地:北京
  • luckyone
    受益匪浅
    2022-10-31归属地:上海
  • xmeng
    在开发一个核心业务只有对数据库增删查改的微服务时,我会选择java.util.concurrent.Executors。 Akka、Reactive除了构建工具、简化代码外,在处理数据流交互并发架构中也会有优势。
    2022-08-24归属地:江苏
  • 时间小偷
    相当抽象啊,希望能有代码演示和更具体的场景案例啊~
    2021-12-27
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部