| 52 | |
| 53 | |
| 54 | void tutorial_multi_pipeline() { |
| 55 | GPipelinePtr pipeline_1 = GPipelineFactory::create(); |
| 56 | GPipelinePtr pipeline_2 = GPipelineFactory::create(); |
| 57 | GPipelinePtr pipeline_3 = GPipelineFactory::create(); |
| 58 | |
| 59 | /** |
| 60 | * 设置个别pipeline的内部 thread pool 资源信息,用以减少整体资源占用(可选) |
| 61 | * 这里主要是为了说明,多个pipeline一起运行的时候,可以通过接口,针对个别pipeline进行调度资源的设置 |
| 62 | */ |
| 63 | UThreadPoolConfig config; |
| 64 | config.default_thread_size_ = 4; |
| 65 | config.max_thread_size_ = 4; |
| 66 | config.monitor_enable_ = false; |
| 67 | UThreadPool pool(true, config); // 开辟一个4个线程的线程池,直接 init,并且参数设置为 config |
| 68 | |
| 69 | /** |
| 70 | * 本例中,pipeline1 和 pipeline2 的并发逻辑相对简单 |
| 71 | * 通过如下接口,将这两个pipeline中的调度资源,修改为同一个线程池。 |
| 72 | * ps:注意,必须在 pipeline init之前,先init传入的线程池 |
| 73 | */ |
| 74 | pipeline_1->setSharedThreadPool(&pool); |
| 75 | pipeline_2->setSharedThreadPool(&pool); |
| 76 | |
| 77 | /** |
| 78 | * 经过上述的设置,pipeline1 和 pipeline2 共享同一个线程池,去调度其中的dag逻辑 |
| 79 | * pipeline3 没有设定,故使用自带的默认线程池完成自己的调度逻辑 |
| 80 | */ |
| 81 | auto result1 = async_pipeline_1(pipeline_1); |
| 82 | auto result2 = async_pipeline_2(pipeline_2); |
| 83 | auto result3 = async_pipeline_3(pipeline_3); |
| 84 | |
| 85 | result1.wait(); |
| 86 | result2.wait(); |
| 87 | result3.wait(); |
| 88 | |
| 89 | GPipelineFactory::clear(); |
| 90 | } |
| 91 | |
| 92 | |
| 93 | int main() { |
no test coverage detected