内卷老员工之并发模型-流水线模型

334 阅读3分钟

这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战

流水线并发模型

流水线并发模型,根据平台与社区的不同,也被称为响应式系统并发模型或时间驱动并发模型。流水线并发模型中,工作者的组织方式类似于工厂中的工人,每个工人只负责工作的一部分,当任务完成后,转交给下一个工人。

image.png

  • 使用流水线并发模型的系统,通常被称为非阻塞io。非阻塞io意味着当工作器开始进行io操作,不会等待io操作完成。io操作速度相对来说比较慢,等待io相当于浪费cpu的时间。与此同时,cpu可能在做其他的事情。当io操作完成后,操作的结果会传递给下一个工作者。
  • 对于非阻塞io,io操作决定了工作器之间的边界。每个工作器在开始io操作前尽可能多的进行工作。io操作结束时,下一个工作器会开始工作,直到不得不开启下一个io操作。

image.png

  • 事实上,工作不会沿着同一条流水线进行工作,因此工作会根据需要的下一工作节点进行传递。可能会有多条流水线在同时进行工作。

image.png

  • 此外,甚至可以将工作传递给多个工作器进行处理,例如一个作业任务被转发给三个工作器。实际上会比上图所示更为复杂。

响应式事件驱动模型

使用流水线并发模型的系统有时也称为响应式系统或事件驱动系统。系统的工作人员对系统中发生的事件做出反应,这些事件要么是从外部世界接收的,要么是由其他工作人员发出的。事件的例子可能是传入的 HTTP 请求,或者某个文件完成加载到内存等。例如nodejs就是这个系统的典型应用。

参与者与通道模型

这是流水线模型的两种特殊应用。

  • 参与者可以认为每个工作节点间都可以相互通信。
  • 而通道则是工作节点不会直接通信,而是把消息放入通道中,由其他工作者在通道中消费。

流水线模型的优点

  • 无共享状态
    • 每个工作节点可以无需考虑其他工作节点的数据共享,相当于单线程。
  • 有状态的工作节点
    • 每个工作节点可以将数据保存在内存之中。
  • 更好的硬件一致性
    • 单线程的代码更符合底层硬件的执行逻辑。

流水线模型的缺点

主要缺点是作业执行分布在多个工作节点上,因此分布在项目的多个类上,很难准确查看正在执行的代码。同时由于回调系统的存在,也会使得代码的编写更为复杂。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。