C ++库构建执行管道

时间:2013-03-08 15:42:04

标签: c++ pipeline

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

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

$ cat /dev/urandom | tr P Q | head -3

在这个非常简单的情况下,管道自下而上,当cat进程停止拉动时,第一个head停止执行。

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

$ cat /raid1/file1 /raid2/file2 | tr P Q > /tmp/file3

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

我会试试线程构建模块http://threadingbuildingblocks.org/。 它是开源和跨平台。维基百科的文章相当不错:http://en.wikipedia.org/wiki/Intel_Threading_Building_Blocks

答案 2 :(得分:2)

我今天刚刚阅读了RaftLib,它使用模板和类来创建名为" kernels"的管道元素。除了并行数据流之外,它还允许使用您已经显示的Bash示例之类的串行管道。从首页的Hello world example开始:

????