go-taskflow: A General-purpose Task-parallel Programming Framework with an integrated visualizer and profiler for Go
Go-Taskflow#
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.
Feature#
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.
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.
Use Cases#
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.
Example#
import latest version: go get -u github.com/noneback/go-taskflow
go-taskflow/examples/conditional/condition.go
Understand Condition Task Correctly#
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.
How to use visualize taskflow#
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.
How to use profile taskflow#
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.
What’s more#
Any Features Request or Discussions are all welcomed.
推荐文章: