“Pipeline” 这个英语单词,经常出现在我看的论文中。今天天气晴朗,惠风和畅,心情愉悦,故有想法搞清楚它的内涵。于是上维基百科查它。先说我的结论,现在这个概念对我而言是:需要处理已有数据,从而得到目标数据,对如何安排处理多条数据流(大多数时候,数据流是单向流动的)的抽象。 “Pipeline” 在牛津词典上的解释有:

  • a series of pipes that are usually underground and are used for carrying oil, gas, etc. over long distances

确实。。“油" 和 “气” 不就是对应 “数据” ?另外,管线和流水线在计算机科学领域有时是同义词。中文维基百科关于“流水线”词条介绍如下:

  • 流水线,亦称管线,是现代计算机处理器中必不可少的部分,是指将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度。其具体执行过程类似工厂中的流水线,并因此得名。

本文要介绍的是计算领域的 Pipeline 。如图1, 在计算领域,pipeline,也被称为 data pipeline ,是一组串联连接的数据处理元素。其中一个元素的输出是下一个元素的输入。 流水线的元素通常以并行或分时(time-sliced)的方式执行。 通常在元素之间插入一定数量的缓冲区存储空间。

hanlp流水线分词只分词 流水线单词_计算机科学

图1. 维基百科中 “Pipeline” 多个词条

它涵盖了

  • 指令流水线
  • 在软件工程中的流水线
  • 绘图管线

指令流水线

在计算机科学中,指令流水线是一种在单个处理器中实现指令级并行性的技术。 流水线尝试通过将传入指令分成一系列顺序步骤来使处理器的每个部分都忙于某些指令,这些步骤由不同的处理器单元执行,并并行处理不同的指令部分。

例如经典的 RISC 流水线,用于中央处理单元(cpu)和其他微处理器中,允许在同一电路中重叠执行多个指令。 电路通常分为多个阶段(stage,下文也翻译成 “级”),每个阶段一次处理一条指令的特定部分,将部分结果传递给下一个阶段。 阶段的示例是指令解码、算术/逻辑和寄存器获取。 它们与超标量执行、操作数转发、推测执行和乱序执行等技术有关。

hanlp流水线分词只分词 流水线单词_HTTP_02

图2. 本图来自维基百科。在 RISC 机器中基本的五级流水线 (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). 垂直轴是连续的指令;水平轴是时间。所以在绿色的那一列,最早的指令是在 WB 级,最新的指令是取指令。

在软件工程中的流水线

在软件工程中,管线是由一系列处理元素(进程、线程、协程、函数等)组成的,它们的排列使每个元素的输出成为下一个元素的输入; 这个名字类似于物理管道。 通常在连续的元素之间提供一定数量的缓冲。 在这些管线中流动的信息通常是记录、字节或位的流(strem),管线中的元素可以称为过滤器; 这也称为管线和过滤器设计模式。 将元素连接到管道类似于函数组合。

狭义地说,管线是线性和单向的,尽管有时这个术语被用于更一般的流动。 例如,一个主要的单向管线可能在另一个方向有一些通信(communication),称为返回通道(return channel)或反向通道(backchannel),如lexer hack,或者管线可能是完全双向的。 具有单向树和有向无环图拓扑的流的行为类似于(线性)流水线——缺少循环使它们变得简单——因此可以松散地称为“管线”。

绘图管线

在计算机图形学中,计算机图形管线、渲染管线或简单的绘图管线是一个概念模型,描述了图形系统将3D场景渲染到2D屏幕所需执行的步骤。一旦3D模型被创建,例如在电子游戏或任何其他3D计算机动画中,绘图管线就是将3D模型转换成计算机显示的内容的过程。由于此操作所需的步骤取决于所使用的软件和硬件以及所需的显示特性,因此没有适用于所有情况的通用图形管线。

hanlp流水线分词只分词 流水线单词_hanlp流水线分词只分词_03

图3. 本图来自维基百科。 绘图管线主要包含 应用阶段,几何阶段 和 光栅化阶段 三个部分

HTTP 流水线

HTTP 流水线是 HTTP/1.1 的一个特性,它允许在一个 TCP (传输控制协议)连接上发送多个 HTTP 请求,而无需等待相应的响应。 HTTP/1.1 规范要求服务器正确响应流水线化的请求,即使服务器不支持 HTTP 流水线化,也要返回非流水线化但有效的响应。 尽管有这个需求,许多遗留的 HTTP/1.1 服务器并不支持正确的管线,这迫使大多数HTTP客户端在实践中不使用HTTP管道。

这项技术被大多数现代浏览器支持的 HTTP/2 的多路复用所取代

在 HTTP/3 中,多路复用是通过新的底层 QUIC 传输协议来实现的,它取代了 TCP 。 这进一步减少了加载时间,因为不再有首行阻塞。

时间,因为不再有首行阻塞。

hanlp流水线分词只分词 流水线单词_计算_04

图4. 本图来自维基百科。 非流水线与流水线连接的时间图