我正在研究一种用于在C++中创建应用程序以同时在不同内核中处理多个输入的体系结构。每个输入同时在单个内核中处理。在核心上的每个进程中,将处理相同的过滤器。例如:filter1.apply(),filter2.apply()和filter3.apply()。图示了4个输入的4个核心的过程,如下所示:

[核心1] [核心2] [核心3] [核心4]
| | | |
V V V V
输入1输入2输入3输入4
| | | |
V V V V
filter1 filter1 filter1 filter1
| | | |
V V V V
filter2 filter2 filter2 filter2
| | | |
V V V V
filter3 filter3 filter3 filter3
| | | |
V V V V
输出1输出2输出3输出4

我不知道哪种架构或设计模式适合于此。如果您给我一些工件(文档或示例应用程序)以进一步阅读,那将是很棒的。

提前致谢。

最佳答案

通常,线程池用于实现此类设计。对于独立的流程,它们几乎可以无限扩展。您可以在TBB和PPL中找到简单的实现。它们提供了许多标准算法和容器的与并发相关的版本。例如,在此示例中,我使用了concurrent_vector(这是一个类似于vector的容器,可以同时从多个线程中安全地对其进行突变),以及使用了parallel_for_each(它可以一次在多个线程上运行该函数)。

concurrent_vector<output> outputs;
std::vector<input> inputs;
parallel_for_each(inputs.begin(), inputs.end(), [](input& input) {
    outputs.push_back(filter3(filter2(filter1(input))));
});

关于c++ - 哪种架构或设计模式适合该应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8701199/

10-11 23:19