C++库构建执行管道

mal*_*lat 6 c++ pipeline

我一直在用C++(作业调度程序库?)搜索可重用的执行管道库.我在Boost内找不到任何东西.所以我最终发现了两个候选人:

我错过了其他候选人吗?有人用过吗?他们在并行io和多线程方面有多好?这些库似乎仍然缺少依赖性处理.例如,我似乎不清楚如何编写如下内容:

$ cat /dev/urandom | tr P Q | head -3
Run Code Online (Sandbox Code Playgroud)

在这个非常简单的情况下,管道自下而上走,第一个cathead过程停止拉动时停止执行.

但是,我不知道在以下情况下如何从多线程和/或并行io中受益:

$ cat /raid1/file1 /raid2/file2 | tr P Q > /tmp/file3
Run Code Online (Sandbox Code Playgroud)

我没办法说:tr当8个处理器可用时,在7个线程上执行.

ern*_*rn0 3

您正在寻找的是数据流框架。管道是数据流的一种特殊形式,其中所有组件都有 1 个消费者和 1 个生产者。

Boost支持数据流,但不幸的是,我对Boost不熟悉。这是链接:http://dancinghacker.com/code/dataflow/dataflow/introduction/dataflow.html

无论如何,您应该将组件编写为单独的程序并使用 Unix 管道。特别是,如果您的数据特征是(或可以轻松转换为)行/文本。

另外一个选择是编写自己的数据流。这并不太难,特别是当您有限制时(我的意思是管道:1-消费者/1-生产者),您不应该实现完整的数据流框架。管道只是将某种函数绑定在一起,将一个函数的结果传递到下一个函数的参数中。数据流框架是关于组件接口/模式和绑定技术的。(很有趣,我已经写了一个。)

  • boost::dataflow 是一个尚未被 boost 接受的提案。 (2认同)