Go语言通用任务并行编程框架,带有集成的可视化工具和分析器
一个类似于 taskflow 的通用任务并行编程框架,带有一个用于 Go 的集成可视化器和分析器,受taskflow-cpp启发,具有 Go 的原生功能和简单性,适用于并发任务中的复杂依赖管理。
特征
- 高可扩展性:轻松扩展框架以适应各种特定用例。
- 原生 Go 的并发模型:利用 Go 的 goroutines 有效地管理并发任务执行。
- 用户友好的编程界面:使用 Go 简化复杂的任务依赖管理。
- 静态\子流\条件\循环任务:定义静态任务、条件节点、嵌套子流和循环流以增强模块化和可编程性。
- 优先级任务计划:定义任务的优先级,优先级较高的任务将首先被安排。
- 内置可视化和分析工具:使用集成工具生成任务的可视化表示并分析任务执行性能,使调试和优化更容易。
使用案例
- 数据管道:协调具有复杂依赖关系的数据处理阶段。
- 工作流自动化:定义并运行自动化工作流,其中任务具有清晰的顺序和依赖结构。
- 并行任务:同时执行独立任务以充分利用 CPU 资源。
相关:
AsyncJob
AsyncJob 旨在帮助您以依赖关系图(DAG)的形式组织代码,而不是按顺序链组织。
JobDefinition是描述代码块及其连接的图表。
- 您可以使用 AddStep、StepAfter、StepAfterBoth 来组织 JobDefinition 中的步骤。
- jobDefinition 可以而且应该在包初始化时构建和封装。
- jobDefinition 有一个通用类型的输入
- 通过输入调用Start,会实例化一个jobInstance,然后开始执行步骤。
- jobDefinition 可以使用 graphviz 进行可视化,更容易让人理解。
- 定义上的所有步骤都将被复制到JobInstance。
- 一旦前一步完成后,就会执行每个步骤。
- jobInstance 也可以可视化,实例可视化包含每个步骤的详细信息(开始时间、持续时间)。
- StepDefinition 描述其先前的步骤。
- StepDefinition 包含通用 Params
- 理想情况下,所有 stepMethod 都应来自 JobInput(JobDefinition 上的通用类型)或静态方法。以避免作业之间共享状态。
- 一个步骤的输出可以作为输入输入到下一个步骤中,类型由 go 泛型检查。
- 步骤包装在AsyncTask中
- 一旦所有依赖关系都完成,就会开始一个步骤。
- 可以应用执行策略 {Retry, ContextEnrichment}