Go-taskflow:类似 taskflow 的通用任务并行编程框架


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 进行可视化,更容易让人理解。
在从 JobDefinition 调用 .Start() 方法后,JobInstance是 JobDefinition 的一个实例
  • 定义上的所有步骤都将被复制到JobInstance。
  • 一旦前一步完成后,就会执行每个步骤。
  • jobInstance 也可以可视化,实例可视化包含每个步骤的详细信息(开始时间、持续时间)。
StepDefinition是一个可以执行并具有输入和输出的单独代码块。
  • StepDefinition 描述其先前的步骤。
  • StepDefinition 包含通用 Params
  • 理想情况下,所有 stepMethod 都应来自 JobInput(JobDefinition 上的通用类型)或静态方法。以避免作业之间共享状态。
  • 一个步骤的输出可以作为输入输入到下一个步骤中,类型由 go 泛型检查。
StepInstance是 StepDefinition 的实例
  • 步骤包装在AsyncTask中
  • 一旦所有依赖关系都完成,就会开始一个步骤。
  • 可以应用执行策略 {Retry, ContextEnrichment}