A taskflow-like General-purpose Task-parallel Programming Framework with an integrated visualizer and profiler for Go, inspired by taskflow-cpp, with Go's native capabilities and simplicity, suitable for complex dependency management in concurrent tasks.
-
High extensibility: Easily extend the framework to adapt to various specific use cases.
-
Native Go's concurrency model: Leverages Go's goroutines to manage concurrent task execution effectively.
-
User-friendly programming interface: Simplify complex task dependency management using Go.
-
Static\Subflow\Conditional\Cyclic tasking: Define static tasks, condition nodes, nested subflows and cyclic flow to enhance modularity and programmability.
Static Subflow Condition Cyclic -
Priority Task Schedule: Define tasks' priority, higher priority tasks will be scheduled first.
-
Built-in visualization & profiling tools: Generate visual representations of tasks and profile task execution performance using integrated tools, making debugging and optimization easier.
-
Data Pipeline: Orchestrate data processing stages that have complex dependencies.
-
Workflow Automation: Define and run automation workflows where tasks have a clear sequence and dependency structure.
-
Parallel Tasking: Execute independent tasks concurrently to fully utilize CPU resources.
import latest version: go get -u github.com/noneback/go-taskflow
Condition Node is special in taskflow-cpp. It not only enrolls in Condition Control but also in Looping.
Our repo keeps almost the same behavior. You should read ConditionTasking to avoid common pitfalls.
if err := gotaskflow.Visualize(tf, os.Stdout); err != nil {
log.Fatal(err)
}Visualize generates raw strings in dot format, use dot to draw a DAG svg.
if err :=exector.Profile(os.Stdout);err != nil {
log.Fatal(err)
}Profile generates raw strings in flamegraph format, use flamegraph to draw a flamegraph svg.
Any Features Request or Discussions are all welcomed.