我一直在用C++(作业调度程序库?)搜索可重用的执行管道库.我在Boost内找不到任何东西.所以我最终发现了两个候选人:
我错过了其他候选人吗?有人用过吗?他们在并行io和多线程方面有多好?这些库似乎仍然缺少依赖性处理.例如,我似乎不清楚如何编写如下内容:
$ cat /dev/urandom | tr P Q | head -3
Run Code Online (Sandbox Code Playgroud)
在这个非常简单的情况下,管道自下而上走,第一个cat在head过程停止拉动时停止执行.
但是,我不知道在以下情况下如何从多线程和/或并行io中受益:
$ cat /raid1/file1 /raid2/file2 | tr P Q > /tmp/file3
Run Code Online (Sandbox Code Playgroud)
我没办法说:tr当8个处理器可用时,在7个线程上执行.
您正在寻找的是数据流框架。管道是数据流的一种特殊形式,其中所有组件都有 1 个消费者和 1 个生产者。
Boost支持数据流,但不幸的是,我对Boost不熟悉。这是链接:http://dancinghacker.com/code/dataflow/dataflow/introduction/dataflow.html
无论如何,您应该将组件编写为单独的程序并使用 Unix 管道。特别是,如果您的数据特征是(或可以轻松转换为)行/文本。
另外一个选择是编写自己的数据流。这并不太难,特别是当您有限制时(我的意思是管道:1-消费者/1-生产者),您不应该实现完整的数据流框架。管道只是将某种函数绑定在一起,将一个函数的结果传递到下一个函数的参数中。数据流框架是关于组件接口/模式和绑定技术的。(很有趣,我已经写了一个。)
| 归档时间: |
|
| 查看次数: |
4585 次 |
| 最近记录: |